Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "abstract"
-
As a developer, sometimes you hammer away on some useless solo side project for a few weeks. Maybe a small game, a web interface for your home-built storage server, or an app to turn your living room lights on an off.
I often see these posts and graphs here about motivation, about a desire to conceive perfection. You want to create a self-hosted Spotify clone "but better", or you set out to make the best todo app for iOS ever written.
These rants and memes often highlight how you start with this incredible drive, how your code is perfectly clean when you begin. Then it all oscillates between states of panic and surprise, sweat, tears and euphoria, an end in a disillusioned stare at the tangled mess you created, to gather dust forever in some private repository.
Writing a physics engine from scratch was harder than you expected. You needed a lot of ugly code to get your admin panel working in Safari. Some other shiny idea came along, and you decided to bite, even though you feel a burning guilt about the ever growing pile of unfinished failures.
All I want to say is:
No time was lost.
This is how senior developers are born. You strengthen your brain, the calluses on your mind provide you with perseverance to solve problems. Even if (no, *especially* if) you gave up on your project.
Eventually, giving up is good, it's a sign of wisdom an flexibility to focus on the broader domain again.
One of the things I love about failures is how varied they tend to be, how they force you to start seeing overarching patterns.
You don't notice the things you take back from your failures, they slip back sticking to you, undetected.
You get intuitions for strengths and weaknesses in patterns. Whenever you're matching two sparse ordered indexed lists, there's this corner of your brain lighting up on how to do it efficiently. You realize it's not the ORMs which suck, it's the fundamental object-relational impedance mismatch existing in all languages which causes problems, and you feel your fingers tingling whenever you encounter its effects in the future, ready to dive in ever so slightly deeper.
You notice you can suddenly solve completely abstract data problems using the pathfinding logic from your failed game. You realize you can use vector calculations from your physics engine to compare similarities in psychological behavior. You never understood trigonometry in high school, but while building a a deficient robotic Arduino abomination it suddenly started making sense.
You're building intuitions, continuously. These intuitions are grooves which become deeper each time you encounter fundamental patterns. The more variation in environments and topics you expose yourself to, the more permanent these associations become.
Failure is inconsequential, failure even deserves respect, failure builds intuition about patterns. Every single epiphany about similarity in patterns is an incredible victory.
Please, for the love of code...
Start and fail as many projects as you can.30 -
Good Morning!, its time for practiseSafeHex's most incompetent co-worker!
Todays contestant is a very special one.
*sitcom audience: WHY?*
Glad you asked, you see if you were to look at his linkedin profile, you would see a job title unlike any you've seen before.
*sitcom audience oooooooohhhhhh*
were not talking software developer, engineer, tech lead, designer, CTO, CEO or anything like that, No No our new entrant "G" surpasses all of those with the title ..... "Software extraordinaire".
*sitcom audience laughs hysterically*
I KNOW!, wtf does that even mean! as a previous dev-ranter pointed out does this mean he IS quality code? I'd say he's more like a trash can ... where his code belongs
*ba dum tsssss*
Ok ok, lets get on with the show, heres some reasons why "G" is on the show:
One of G's tasks was to build an analytics gathering library for iOS, similar to google analytics where you track pages and events (we couldn't use google's). G was SO good at this job he implemented 2 features we didn't even ask for:
- If the library was unable to load its config file (for any reason) it would throw an uncatchable system integrity error, crashing the app.
- If anything was passed into any of the functions that wasn't expected (null, empty array etc.) it would crash the app as it was "more efficient" to not do any sanity checks inside the library.
This caused a lot of issues as some of the data needed to come from the clients server. The day we launched the app, within the first 3 hours we had over 40k crash logs and a VERY angry client.
Now, what makes this story important is not the bugs themselves, come on how many times have we all done something stupid? No the issue here was G defended all of this as the right thing to do!
.. and no he wasn't stoned or drunk!
G claimed if he couldn't get the right settings / params he wouldn't be able to track the event and then our CEO wouldn't have our usage data. To which I replied:
"So your solution was to not give the client an app instead? ... which also doesn't give the CEO his data".
He got very angry and asked me "what would you do then?". I offered a solution something like why not have a default tag for "error" or "unknown" where if theres an issue, we send up whatever we have, plus the file name and store it somewhere else. I was told I was being ridiculous as it wasn't built to track anything like that and that would never work ... his solution? ... pull the library out of the app and forget it.
... once again giving everyone no data.
G later moved onto another cross-platform style project. Backend team were particularly unhappy as they got no spec of what needed to be done. All they knew was it was a single endpoint dealing with very complex model. There was no Java classes, super classes, abstract classes or even interfaces, just this huge chunk of mocked data. So myself and the lead sat down with him, and asked where the interfaces for the backend where, or designs / architecture for them etc.
His response, to this day frightens me ... not makes me angry, not bewilders me ... scares the living shit out of me that people like this exist in the world and have successful careers.
G: "hhhmmm, I know how to build an interface, but i've never understood them ... Like lets say I have an interface, what now? how does that help me in any way? I can't physically use it, does it not just use up time building it for no reason?"
us: "... ... how are the backend team suppose to understand the model, its types, integrate it into the other systems?"
G: "Can I not just tell them and they can write it down?"
**
I'll just pause here for a moment, as you'll likely need to read that again out of sheer disbelief
**
I've never seen someone die inside the way the lead did. He started a syllable and his face just dropped, eyes glazed over and he instantly lost all the will to live. He replied:
" wel ............... it doesn't matter ... its not important ... I have to go, good luck with the project"
*killed the screen share and left the room*
now I know you are all dying in suspense to know what happened to that project, I can drop the shocking bombshell that it was in fact cancelled. Thankfully only ~350 man hours were spent on it
... yep, not a typo.
G's crowning achievement however will go down in history. VERY long story short, backend got deployed to the server and EVERYTHING broke. Lead investigated, found mistakes and config issues on every second line, load balancer wasn't even starting up. When asked had this been tested before it was deployed:
G: "Yeah I tested it on my machine, it worked fine"
lead: "... and on the server?"
G: "no, my machine will do the same thing"
lead: "do you have a load balancer and multiple VM's?"
G: "no, but Java is Java"
... and with that its time to end todays episode. Will G be our most incompetent? ... maybe.
Tune in later for more practiceSafeHex's most incompetent co-worker!!!31 -
I turned 40 yesterday. Here are some lessons I've learned, without fluff or BS.
1) Stop waiting for exceptional things to just happen. They rarely do, and they can't be counted on. Greatness is cultivated; it's a gradual process and it won't come without effort.
2) Jealousy is a monster that destroys everything in it's path. It's absolutely useless, except to remind us there's a better way. We can't always control how we feel, but we can choose how we react to those feelings.
When I was younger, jealousy in relationships always led to shit turning out worse than it probably would have otherwise. Even when it was justified, even when a relationship was over, jealousy led me to burn bridges that I wished I hadn't.
3) College isn't for everyone, but you'll rarely be put square in the middle of so much potential experience. You'll meet people you probably wouldn't have otherwise, and as you eventually pursue your major, you'll get to know people who share your passions and dreams. Despite all the bullshit ways in which college sucks, it's still a pretty unique path on the way to adulthood. But on that note...
4) Learn to manage your money. It's way too easy to get into unsustainable debt. It only gets worse, and it makes everything harder. We don't always see the consequence of credit cards and loans when we're young, because the future seems so distant and undecided. But that debt isn't going anywhere... Try not to borrow money that you can't imagine yourself paying back now.
5) Floss every day, not just a couple times per week when you remember, or when you've got something stuck in your teeth. It matters, even if you're in your 20s and you've never had a cavity.
6) You'll always hear about living in the moment, seizing the day... It's tough to actually do. But there's something to be said for looking inward, and trying to recognize when too much of our attention is focused elsewhere. Constantly serving the future won't always pay off, at least not in the ways we think it will when we're young.
This sentiment doesn't have much value when it's put in abstract, existential terms, like it usually is. The best you can do is try to be aware of your own willingness and ability to be open to experiences. Think about ways in which you might be rejecting the here and now, even if it's as seemingly-benign as not going out with some friends because you just saw them, or you already went to that place they're going to. We won't recognize the good old days for what they were until they're already gone. The trick is having as many good days as possible.
7) Don't start smoking; you'll never quit as soon as you'll think you can. If you do start, make yourself quit after a couple years, no matter what. Keep your vices in check; drugs and alcohol in moderation. Use condoms, use birth control.
8) Don't make love wait. Tell your friends and family you love them often, and show them when you can. You're going to lose people, so it's important. Statistically, some of you will die young, yourselves.
When it comes to relationships, don't settle if you can't tell yourself you're in love, and totally believe it. Don't let complacency and familiarity get in the way of pursuing love. Don't be afraid to end relationships because they're comfortable, or because you've already invested so much into them.
Being young is a gift, and it won't last forever. You need to use that gift to experience all the love that you can, at least as a means to finding the person you really want to grow old with, if that's what you want. Regardless, you don't want to miss out on loving someone, and being loved, because of fear. Don't be reckless; just be honest with yourself.
9) Take care of your body. Neglecting it makes everything tougher. That doesn't mean you have to work out every day and eat like a nutritionist, but if you're overweight or you have health issues, do what you can to fix it. Losing weight isn't easy, but it's not as hard as people make it out to be. And it's one of the most important things you can do to invest in a healthy adulthood.
Don't put off nagging health issues because you think you'll be fine, or you don't think you'll be able to afford it, or you're scared of the outcome. There will always be options, until there aren't. Most people never get to the no-options part. Or, they get there because all the other options expired.
10) Few things will haunt you like regret. Making the wrong choice, for example, usually won't hurt as much. I guess you can regret making the wrong choice, but my deepest regrets come from inaction, complacency and indifference.
So how can we avoid regret? I don't know, lol. I don't think it's as simple as just commiting to choices... Choosing to do nothing is still a choice, after all. I think it's more about listening to your gut, as cliche as that sounds.
To thine own self be true, I guess. It's worth a shot, even if you fail. Almost anything is better than regret.12 -
Me: Oh I see were using a non-standard architecture on this app. I like this bit but what is this doing? never seen it before.
Him: Ah we use that to abstract the navigation layer.
Me: oh ok, interesting idea, but that means we need an extra file per screen + 1 per module. We also can't use this inbuilt control, which I really like, and we've to write a tonne of code to avoid that.
Him: Yeah we wanted to take a new approach to fix X, this is what we came up with. Were not 100% happy with it. Do you have any ideas?
**
Queue really long, multi-day architecture discussion. Lots of interesting points, neither side being precious or childish in anyway. Was honestly fantastic.
**
Me: So after researching your last email a bit, I think I found a happy middle ground. If we turn X into a singleton, we can store the state its generating inside itself. We can go back to using the in-built navigation control and have the data being fetched like Y. If you want to keep your dependency injection stuff, we can copy the Angular services approach and inject the singletons instead of all of these things. That means we can delete the entire layer Z.
Even with the app only having 25% of the screens, we could delete like 30+ files, and still have the architecture, at a high level, identical and textbook MVVM.
Him: singleton? no I don't like those, best off keeping it the way it is.
... are you fucking kidding me? You've reinvented probably 3 wheels, doubled the code in the app and forced us to take ownership of something the system handles ... but a singleton is a bad idea? ... based off no concrete evidence or facts, but a personal opinion.
... your face is a bad idea15 -
I have a bunch of contesters fort the worst interview.
#1 The Dishonest Ignorant
Me: *asks question*
#1: *stumbles*
Me: It's okay to say that you don't know.
#1: *continues to ramble on without making sense*
Me: Well, okay. That is all. I don't think that this will be a fit.
#2 The fraud
Me: How would you rate your knowledge in object orientated programming?
#2: Very advanced! I am an expert!
Me: Can you state the difference of an interface and an abstract class?
#2: *surprised pikachu-face* Well not that advanced!
#3 The trickster
During a skype call (without video):
Me: *asks question*
#3: *keyboard sounds aclacking*
Me: Are you googling?
#3: No *click clack click a clack* ... and to answer your question: *starts reading from the first search results*
The real bummer is, that in all of these cases, just saying "I don't know" would have been fine. (The "expert" OOP-guy would still have some explaining to do.)
It's not like that our interview process resolves around trick questions or that you'd get kicked out for getting one answer wrong. Though how can I trust somebody not to lie to me on a daily basis if they fake their interview?
We keep the interview relatively basic and rely on real-word coding exercise anyway and it helps us to get an idea on where we would gain support from them and where we need to support them.
As a developer you spend a lot of time learning new stuff anyways.
It blows my mind.39 -
When I get home, my wife will probably tell me about all the fun things she did with the kids today. She'll tell me about all the frustrating things they did too and stories about how they made her almost pull her own hair out.
Then 20 minutes later she'll ask me how my day was and I'll say, "Oh, I dunno. I worked on a really hard SQL query today..."3 -
The strangest place I've ever coded... I woudn't say it was the strangest, but definitely the least expected?
The hospital's recovery room after my second child.
I was working at/in Hell at the time (see previous rants concerning API Guy and the asshole salesman CEO). Said salesman douchebag ceo bossman had no recollection of me being expecting, going to the hospital, or even why I was there (and if he did, he wouldn't have cared at all). He still insisted I work on his shit features because they were so important for his ever-so-important client and their new signups that they were going to do anyway. I loathe him so fucking much.
Anyway, the feature in question was pretty tiny: during the new client onboarding process, if the client came from a specific affiliate link, the frontpage should change to reflect that affiliate's branding -- different background, a custom header, etc. It was pretty easy to do, though I made certain he didn't know that. During an hour while everyone else was asleep (and while I wasn't passing out from exhaustion), I pulled out my macbook air and built his stupid feature next to my hours-hold newborn.
Did I get any appreciation for that? Sure! He showed appreciation by not yelling at me for a few days. But only because he thought the feature was difficult and that I got it done quickly, not because anything else was difficult. Asshole.
Yes, I told him several times before and several times more afterward. I don't know what goes though his head or how it even works, but it didn't seem like a big deal to him, and he kept forgetting, or maybe he just pretended to listen like he always did. Fucking asshole apparently never heard of maternity leave. I could rant and swear and curse and fume and rage about him for years 🤬 I can't believe I was so excited when I netted that job.
But anyway, building the feature was actually kind of relaxing. I organized and wrote the entire project myself, so working with it was a pleasure, and it was an easy change that I could abstract nicely and cleanly. I totally didn't mind doing it, and actually kind of enjoyed it. I just hated who I was doing it for, and that he didn't fucking care. Used and abused? absolutely. I hope he dies in the most painful, gruesome way possible. Spaghettification might not even be awful enough6 -
This ist basically my daily work. I have to write Java code in excel files which then are being converted into a DSL and then again being converted into Java code. On top of that many wrappers were built which abstract all this things away..
We have about 30 such excel files which contain about 50000 business rules.
There is no version control for this tables and 5 different team are working on the same tables parallel.
The name of this framework is Drools or as I call it: HELL 😡16 -
Well, it all started off with hardware-level programming involving jumpers and stuff like that... Then came Assembly, which was good.. B, C compilers. Finally came the interpreted languages, and that's where in my opinion the abstraction should've ended. But no, we needed more frameworks, more libraries, even more abstraction! Where does it end? As it seems to be going, I guess that users will have kid toys - no iToys! - for electronics and we'll be programming on with bloated Scratch GUI's. Nothing against Scratch, but that shit ain't proper programming anymore. God I can't wait for the future.
ABSTRACT ALL THE THINGS!!!
Oh and not to mention that all software will be governed in political correctness by some Alex SJW AI shit that became sentient. Not a single programming term will be non-offensive anymore, no matter how hard you try to not offend anyone, or God forbid - don't care about it because you just want to make something that's readable, usable and working!! Terms, UI names for buttons, heck even icons! REMOVE IT BECAUSE IT OFFENDS SOMEONE THAT I DON'T EVEN KNOW JACK SHIT ABOUT!!!18 -
So I tried to start learning Spring 5
How the fuck do you guys do it? Holy shit.
30 seconds in:
"Spring really isn't hard, you start with this request handler interacting with a view parser..."
Alright, sounds good
2 minutes in:
"So in order to use SpringResponseDriverActionHandlerServiceRequesterService you'll need to import com.org.java.spring.util.driver.comagain.request.response.request.drivers and include this 37 level deep nested XML property and finally extend this abstract class and implement it over an iterable list with this specific annotation aaaaaaand.... Done"
> Hello, world!
"See, spring is easy!"11 -
I am fed up working with unskilled software developers. Or to be more specific, working with people who have no idea of sofware architecture.
Most people I've worked with have simply no idea what they are doing in the broad picture, they can only follow patterns they see and implement their feature in the same way. They can't think about the abstract concepts which should be the foundation of the project.
They fail to write unit tests which are maintainable. They write one fucking test per method which is testing 50 things at the same time, making it often impossible to understand what is being tested.
They think putting stuff in private methods makes their class better and is some kind of separation of concerns.
They write classes and afterwards create interfaces for these classes named {Class}Interface, shoving all the methods into that interface. They think it's good design to do so.
They are unable to think about the reasons why things are done the way they are done and that you don't do stuff for the sake of doing stuff, but to achieve certain goals like interchangeability.
They don't undestand how to separate business logic from the application code.
They have no sense for naming things beautifully. They don't see how naming things is a major part of good software architecture.
They get layer concepts wrong and then create godlike {EntityName}Service classes, which do everything related to a particular entity.
They fail to shape the boundaries within a software project, entangling stuff which should live in individual modules.
All I want is to work in a team with professionals.2 -
If you need to learn/teach object orientation, these are my approaches (I hate that classic "car" example):
1) Keep in mind games like Warcraft, Starcraft, Civilization, Age of Empires (yes, I am old school). They are a good example of having classes to use, instantiating objects (creatures) and putting them to work together. As in a real system.
2) Think of your program as an office that has a job to do, or a factory that has something to deliver. Classes are the roles/jobs and objects are the workers/employees. They don't need to be complex, but their purpose must be really (really, really) well defined. Just like in a real office / factory.
3) Even better (or crazier), see your classes and objects as real beings, digital creatures in a abstract world, and yourself as a kind of god, who creates species (define classes) with wisdom. Give life when it is the time for them to come into the world (instantiate object) and kill them when they are done with their mission (dispose an object). Give them behavior, logic, conditions to work with, situations where they take action, and when they don't. Make them kinda "smart". Build them able to make decisions and take actions based on conditions. Give them life. Think on your program as an ecossystem. There must be balance, connection, species must be well defined and creatures must work together to achieve a common objective. Don't just throw code and pray for it to run. Plan it.
-----
When I talk about my classes like they are real beings, and programs as mini-worlds, some people say I am crazy, some others say that's passion.
It is both! @__@3 -
Bad dev practices:
1. Forgetting to version control some fun project i am doing for a long time and then commit everything at once. And forget about it again..
2. I probably have too much love for abstraction. So i abstract stuff just for the fuck of it to the point my friends dont even understand what the program is for.
3. I have no patience and due to that i lose motivation when i think of some idea that is big.
4. I cant keep my ideas small enough, and i dream too big until problem3 kicks in, and then i drop the entire idea.6 -
I get pissed when somebody takes me out of my coding mindset for something minor. A deep bubble of abstract thought gets popped so that I can be told that we'll be eating dinner in an hour. I then have to start my thought processes from scratch.
This is why I can't get any work done during the daytime, and why I do all my coding at night.
This comic depicts this issue perfectly.3 -
I'm currently rewriting perfectly clean and functioning Scala code in Java (because "Enterprise", yay). The amount of unnecessary boilerplate I have to add is insane. I'm not even talking big complicated code but two liners or the lack of simple things like a range from 5 to 10.
Why do I have to write
List<Position> occupiedPositions = placedEntities.stream()
.flatMap((pe) -> pe.occupiedPositions().stream())
.collect(Collectors.toList());
instead of simply
val occupiedPositions = placedEntities.flatMap(_.occupiedPositions)
Why on earth does `occupiedPositions.distinct` suddenly become a monstrosity like `occupiedPositions.stream().distinct().collect(Collectors.toList())` where the majority of code is pure boilerplate? And this is supposed to be the new and better Java8 api which people use as evidence that Java is now suddenly "functional" (yeah no, just no).
Why do APIs that annotate parameters with @Nullable throw NullPointerExceptions when I pass a null? Why does the compiler not help prevent such stupidity? Why do we use static typing PLUS those annotations and it still crashes at runtime like every damn dynamic, interpreted language out there? That's not unfortunate, it's a complete waste of time.
Why is a simple idea like a range from x to 10 (in scala literally `x to 10`) not by default included in Java? There's Guava's version of Range which does not have a helper for integer ranges (even though they are the most used ones). Then there's apache.commons version which _has_ a helper for integers, but is strangely not iterable (wtf I don't even...).
Speaking of Iterable: How difficult could it be to convert an abstract Iterable<T> into a concrete List<T>? In scala it's surprisingly `someIterable.toList`. I found nothing like that so I took to stackoverflow where I found a thread in which people suggested everything from writing your own ListUtils helper class, using Guava (which is a huge dependency!) to using the new Java8 features inline (which is still about three lines long). I didn't know this was such a hard problem in computer science, TIL.
How anyone can be productive in this abomination of a language is beyond me now, even though I've used it for many years while learning to code (back then I didn't know there were much better ways to do things). The only good part is that I have to endure this nonsense for only about 3 days longer then I'm free again!12 -
I learnt programming by making cheats for games and reverse engineering them. It was a fun experience as it wasn't always easy to start with C++ and assembly but it was definitely worth it. Though when you come from a low level language such as C++, looking at highly abstract languages such as Javascript makes everything feel wrong in Javascript, especially when it comes to types and how you can just switch types in the middle of the code :D. But it also gives you an understanding of how Javascript could be implemented, what the engine is doing in the background when you create an object etc..
-
Wow my job sucks right now. Un fuckin believable.
I got hired a month ago as a programmer. Everything went fine at first, then my Boss asked if I could do 3D modeling, and I could, I used Maya for 4 years, but I told him I only can do simple low poly models. A partner company of ours needed some help in their 3D department and I had to help.
Well, I thought, a small 3D project from time to time would be nice and refreshing, especially since it was very easy geometry, my Boss even showed me some previous projects and That was totally doable even for me.
So i started out making the first few models in blender, because we dont have anything else. After a day of getting used to blender i sent off the first models and it all began.
They wanted detailed, high poly models of some mechanical parts, my Boss originally told me it was just an abstract visualisation... fuck me...
Well I agreed to it so had to do it. The partnering Company started to change things, seemingly at random. Had a model completely modelled, textured and animated, now they want to change the model so I have to redo the UVs, the texture and the Animation god fucking damnit.
But still I thought ok, its only for a bit. Now my boss accepted even more work. Because of endless reworks I couldnt finish even one model and have to already make the new ones.
Now my boss is pissed because that company is pissed that i cant know what they want.
Big pile of misscommunication.
I hope this is over soon but I overheard that more is coming...6 -
Soooo I think I have finally come to the point that I may have to create a YouTube channel, to teach software engineering from the ground up... and teach it the way the universities and everyone else should be teaching it, so that they have a solid foundation.... throwing hello world, and loops and variables at folks out of the box without any of the environment context or low level embedded register, even logic gate understanding
That lack of understanding is why, soooo many college students and younger folks, are actually pretty shitty engineers. Everything is high level languages and theoretical concepts to them. Nothing practical, that’s why there’s sooo many python and java developers that can’t for the life of them understand memory management, low level hardware interfacing etc, because the colleges don’t teach it the way it use to be taught.
I seriously fear 30 years from now or sooner when there are few embedded engineers only left till retirement, as without those folks the whole pyramid of electronics falls to pieces.
Java, C#, python, all that shit don’t run on the bare metal... there’s this magical layer of C, and assembler that does all the work just so folks can abstract their thoughts.
Either 1 of two situations will happen.. price of electronics will rise because the embedded guys are few and far between therefore salaries skyrocket... OR everything starts running shit like java on the metal, where there are a over abundance of developers, their salaries will be low because there are soo many but the processing power, space, and energy needed to run java natively causes electronics cost to increase
but regardless 30 years from now if those script kiddies are building everything I fear it cuz there’s gonna be memory leaks, and overflow issues everywhere.. shit be blowing up more than 4th of July.. lol
Soooo in effort to prevent that and keep the embedded engineers up, or atleast properly educate the script kiddies, I’m gonna make that YouTube channel.. 1 maybe 2 videos a week, 1-2 hours sessions each.. starting at the fucken ground and building up.39 -
You want to land a job as PHP developer? About to go to an interview?
There are two ways:
1. Be able to explain the difference between an interface and an abstract class and their purposes. (I shit you not.)
2. If you aren't able to, then simply state you don't know and are eager to learn.
(The second approach might not work if you claimed to know object oriented programming "very well" before though.)
Yet I am astounded in how many interviews people were either playing smart and just rambled on not wanting to lose face. During the remote calls of some special candidates I could even hear them typing on their keyboards in the background googling the answers to my questions.
And the irony is that I thereby had to veto their appliance. As they had lost my trust in being able to communicate honestly. And for wasting my time.
Our domain is complicated and ever-changing and not knowing certain parts of software development is *normal*.
Yet don't just try to fake it in order to land a job. It won't work, and when it does you may find yourself literally in the company of like-minded individuals.23 -
Ok, so when I inherit a Wordpress site I've really stopped expecting anything sane. Examples: evidence that the Wordpress "developer" (that term is used in the loosest sense possible) has thought about his/her code or even evidence that they're not complete idiots who wish to make my life hell going forwards.
Have a look at the screen shot below - this is from the theme footer, so loaded on every page. The screenshot only shows a small part of the file. IT LITERALLY HAS 3696 lines.
Firstly, lets excuse the frankly eye watering if statement to check for the post ID. That made me face palm myself immediately.
The insanity comes for the thousands of lines of JQuery code, duplicated to hell and back that changes the color of various dividers - that are scattered throughout the site.
To make things thousands of times worse, they are ALL HANDED CODED.
Even if JavaScript was the only way I could format these particular elements I certainly wouldn't duplicate the same code for every element. After copy and pasting that JQuery a couple of times and normal developer would think one word, pretty quickly - repetition.
When a good developer notes repetition ways to abstract crap away is the first thought that comes to mind.
Hell, when I was first learning to code god knows how long ago I always used functions to avoid repetition.
In this case, with a few seconds though this "developer" could have created a single JQuery handler and use data attributes within the HTML. Hell, as bad as that is, it's better than the monstrosity I'm looking at now.
I'm aware Wordpress is associated with bad developers due to it's low barrier to entry, but this site is something else.
The scary thing is that I know the agency that produced this. They are very large, use Wordpress exclusively and have some stupidly huge clients that would be know nationally.
Wordpress truly does attract some of the most awful "developers" and deserves it's reputation.
If you're a good developer and use Wordpress I feel sorry for you, as you're in small numbers from my experience.
Rant over, have vented a bit and feel better. Thanks Devrant.6 -
Since the beginning of this year our IT department has a new boss. He has no idea about IT, but worked with the other departments and CEO + management on an new business strategy. The other department bosses recogniced that this guy is stupid and only talking hot air, but not the CEO and management.
The IT part of the strategy is abstract and bullshit. The IT Team (we) was not included in building this. We only got the "finished" presented.
So our Team should integrate 6 big new systems (ERP, CRM,...) within 1,5 years. No system is actually fixed and the IT boss is only saying: "Its easy, just some interfaces to connect".
Nice additional: CEO says: Either we go with the strategy or we can leave the company.
My decision is made.4 -
Oh null, how I detest you.
select birthdate, isnull(birthdate) from Users;
>> [null, 0]
Maybe I wrongfully accuse the abstract concept, and should rather loathe the engineers who can't wrap their heads around null despite their heads being a skull literally wrapping fucking nothingness.
Oracle engineers:
"Wait that's invalid input. What do we do?"
"Default the date to 0000-00-00?"
"That kind of looks like a null..."
"Hmm but it isn't *really* a full-on, butt-clenching, hardcore, intrinsic, I-can-taste-it-in-the-air null"
"Yeah not really feeling it either. It's not giving me the typical null-goosebumps."
"Oh, I know! Let's make it a pretend-null, where the actual type totally depends on the layer of the application!"
"Yeah developers love ambiguous random conversions!"4 -
math be like:
"Addition (often signified by the plus symbol "+") is one of the four basic operations of arithmetic; the others are subtraction, multiplication and division. The addition of two whole numbers is the total amount of those values combined. For example, in the adjacent picture, there is a combination of three apples and two apples together, making a total of five apples. This observation is equivalent to the mathematical expression "3 + 2 = 5" i.e., "3 add 2 is equal to 5".
Besides counting items, addition can also be defined on other types of numbers, such as integers, real numbers and complex numbers. This is part of arithmetic, a branch of mathematics. In algebra, another area of mathematics, addition can be performed on abstract objects such as vectors and matrices.
Addition has several important properties. It is commutative, meaning that order does not matter, and it is associative, meaning that when one adds more than two numbers, the order in which addition is performed does not matter (see Summation). Repeated addition of 1 is the same as counting; addition of 0 does not change a number. Addition also obeys predictable rules concerning related operations such as subtraction and multiplication.
Performing addition is one of the simplest numerical tasks. Addition of very small numbers is accessible to toddlers; the most basic task, 1 + 1, can be performed by infants as young as five months and even some members of other animal species. In primary education, students are taught to add numbers in the decimal system, starting with single digits and progressively tackling more difficult problems. Mechanical aids range from the ancient abacus to the modern computer, where research on the most efficient implementations of addition continues to this day."
And you think like .. easy, but then you turn the page:17 -
Fuck (some of) you backend developers who think regurgitating JSON makes for a good API.
"It's all in JSON. iOS can read JSON, right?"
A well-trained simian can read JSON, still doesn't mean it can do something with it. Your shitty API could be spitting out fucking ancient Egyptian for all I care, just make it be the same ancient Egyptian everywhere!
Don't create one endpoint that spits out the URL for the next endpoint (completely different domain, completely different path structure). Are you fucking kidding me?
As if that wasn't enough, endpoints receive data structured in one way, but return results in another!! "It's all JSON", but it's still dong.
How do I abstract that, you piece of shit? Now I have to write ever so slightly different code in multiple places instead of writing it only once.
How the fuck do I even model that in a database?
Have a crash course on implementing APIs on the client side and only come back when you're done.
Morons.6 -
Frustrated, tired and a bit lost.
I'm a "Senior PHP Backend Dev", which includes not the greatest tech stack nor the best job title, but it pays fine, and the company is awesome to work for.
I suck at writing features, but I'm great at bitching, and I easily put complex abstract concepts into usable models. So I'm also QA, tester, tech lead, database architect, whatever.
That makes writing PHP less annoying, because I create the rules, and whip devs around when they forget a return type definition or forget to handle an edge case. But I don't write a lot of code anymore, I mostly read (bad) code.
Lately I REALLY feel like doing something else... problem is that I know JS/ES6, but really dislike React/Vue and the whole crappy modern frontend toolchainchootrain of babelifyingwebpackingyarnballs. I know Python/Tensorflow/etc, but don't feel like I want to go into data science or AI. And then I'm awesome at the shit no one uses, like Haskell, Go and Rust (and worse).
I got a job offer which combines a very interesting PHP codebase with a Java infrastructure, where I could learn a lot... and I'm kind of tempted.
Problem is, everyone always shits on Java. I always made a bit of fun of Java myself. Don't even know exactly why, probably some really cruel instinct which causes kids to bully the least popular kid.
I know the basics, I've written the hello world, and a small backend app for a personal project. I know how strict and verbose it can be. I love the strictness in Haskell and Rust.... but those are both also quite terse.
Should I become a Java dev? I'm not talking about Android SDK, but an insane enterprise codebase at a life sciences corporation.
To the pro Java devs: What are the best and worst things about your job, about the weekly processes, about the toolchains? Have you ever considered other languages? Do you unconditionally love and believe in Java, or do you believe Swift, Kotlin, Scala or whatever will eventually make it completely obsolete?
Will Java hasten my decline into the cynical neckbeard I was always destined to be?
There are a lot more fun langauges, but looking at realistic demand and career value...20 -
Don't you hate it when your co-worker does dumb things, but thinks it's the "clean code" way?
The following is a conversation between me and a co-worker, who thinks he's superior to everyone because he thinks he's the only one who read the Clean Code series. Let's call him Bill.
Me: I think the feature we need is quite simple, our application needs to call this third party API, parse the response and pass it to the next step. Why do you need to bury everything under an abstraction of 4 layers?
Bill: bEcAuSe It'S dEcOuPlInG, aNd MaKe ThE cOdE tEsTaBlE
Me: I don't know man, you only need to abstract the third party api client, and then mock it if you want. Some interfaces you define makes no sense at all. For example, this interface only has 1 concrete implementation, and I don't think it will ever have another. Besides, the concrete implementation only gets the input from the upper layer and passes it down the lower layer. Why the extra step? I feel like you're using interface just for the sake of interface.
Bill: PrOgRaMmInG tO iNtErFaCe, NoT cOnCrEtE iPlEmEnTaTiOn!!!
Me: You keep saying those words, I don't think they mean what you think they mean. But they certainly do not mean that every method argument must be an interface
Bill: BuT uNcLe BoB blah blah blah...
Me: *gives up all hope*14 -
Haha kids, you're all dead wrong. Here's my story.
There is a thing called “emergence”. This is a fundamental property of our universe. It works 100% of the time. It can't be stopped, it can't be mitigated. Everything you see around you is an emergent phenomenon.
Emergence is triggered when a lot of similar things come together and interact. One water molecule cannot be dry or wet, but if you have many, after a certain number the new property emerges — wetness. The system becomes _wet_.
Professionalism is an emergent phenomenon too, and its water molecules are abstract knowledge. Learn tech things you're interested in, complete random tutorials, code, and after a certain amount of knowledge molecules is gained, something clicks inside your head, and you become a professional.
Unfortunately, there are no shortcuts here. Uni education can make you a professional seemingly quicker, but it's not because uni knowledge is special, it's because uni is a perfect environment to absorb a lot of knowledge in a short period of time.
It happened to me too. I started coding in Pascal in fifth grade of high school, and I did it till sixth. Then, seventh to ninth were spent on my uni's after-school program. After ninth grade, I drop out of high school to get to this uni's experimental program. First grade of uni, and we're making a CPU. Second grade, and we're doing hard math, C and assembly.
And finally, in the third grade, it happens. I was sitting there in the classroom, it was late, and I was writing a recursive sudoku solver in Python. And I _felt_ the click. You cannot mistake it for anything else. It clicks, and you're a changed person. Immediately, I realized I can write everything. Needless to say, I was passing everything related to code afterwards with flying colours.
From that point, everything I did was just gaining more and more experience. Nothing changed fundamentally.
Emergence is forever. If you learn constantly, even without a concrete defined path, I can guarantee you that you _will_ become a professional. This is backed by the universe itself. You cannot avoid becoming one if you're actively accumulating emergence points.
Here's the list of projects I made in the past 11 years: https://notion.so/uyouthe/...
I'm 24.7 -
Okay this is it; FUCK java on android. You need so many fucking workarounds, its insane. Im tryna merge to bmps together, one on top, and the helper class is at 400 lines already and its only kinda working. If you gonna abstract things away, then fucking abstract them well (ocaml) or not at all (c).16
-
abstract class :
protected virtual void doSomething()
{
//some stuff
}
child class
protected override void doSomething()
{
base.doSomething();
}
IMHO this is what go fuck yourself means.......4 -
This stupid crap is pissing me off.
I write a quick blob of code that performs an http request with custom headers and writes the response to a file. easy squeezy. Everything works.
I abstract it into a class and add request building and stages (enjoayble!), and have one method make the response, read its body, and write to a file. I literally copy/pasted most of my existing code into the method and indented it. The only changes were updating var names to instance vars.
But now? It's complaining something is trying to read the request body twice, and it's throwing a fit. What? How? You were just working!
asfklasjdf;l8 -
I'm so fucking tired of OOP.
This bullshit never ends. Everyone treats OOP in their own, proper (of course) way. You read tons of those fashion books, like uncle bob and shit. and then comes a dumb asshole that starts reviewing your code, and tells you doing it wrong. FUCK. and you can't tell anything to your TL or PM cuz they are same dumb asholes. Because after you fix all the bullshit from the first asshole, those more responsible assholes come and tell you that you still doing it wrong.
- uh.. bruh, why don't you make interface for everything? that' S.O.L.I.D, you know.. it just right thing.
- bruh, why don't you use enum and switch case. we need a factory.
- bruh, we don't use abstract classes, use interface
- could you rewrite your linq/stream thing into a class and a method. it's just simpler for us. foreach loop is something everyone knows.
well,then go and LEARN the tool you're dealing with, coderfucker.
FUUUUCK.13 -
I got in trouble for refactoring code to be modular. They said “thats too complicated the maintenance team”.
Said coworker produced a kludge of copy pasted code so the dumb ass maintenance team could understand it.
tldr; interfaces and abstract classes are too advanced for our employees so make the codebase shitty on purpose.3 -
How come it is so hard to find good developers. Have been doing interviews for a couple of weeks now (for a senior PHP developer role).
First round is me talking about the function and company, asking questions about candidates experience, wishes and we usually end in some tech conversations. Most of the resumes I got are pretty fucking good. I mean, experience with low-level languages, experience with the problems we need to solve here, contributions to open-source, experience in R and MathLab etc etc. On paper they look perfect.
For the second round I give them an assessment which they can do at home on their own machine in their own time. It's not a hard one, just some mathmatical problems they need to solve. A quick google GIVES the answer (no joke!!). But that's OK, I look at their code cleanliness, proper use of commenting so I can determine if they are solo-developers or fit good in a team and if they abstract repeated functions and make sure that they take their work seriously, you know the drill.
It pisses me off that I get BROKEN FUCKING CODE WHICH DOES NOT EVEN RUN and that I get code back which I look at and makes me vomit instantly, I mean, DO YOU EVEN TAKE YOUR PROFESSION SERIOUS? How dare you to ask for 50k the year, a lease-car, extra bonusses AND YOUR FUCKING CODE SPITS OUT COMPLETLY WRONG ANSWERS OR DOES NOT EVEN RUN WHAT THE FUCK DUDE GO BACK TO FROM WHICH EVER HOLE YOU CRAWLED OUT AND STOP WASTING OTHER PEOPLES TIME WITH YOUR FUCKING INCOMPENTENCE...19 -
So today I saw another 'OOP should die' article.
And I decided I should google around a bit to find out why.
Reasons I found:
- Things get too complicated
- Things get too abstract (same as the above really)
But when I search for alternatives, only functional programming and different ways to use OOP get mentioned.
I still don't get why OOP is supposedly bad though.
Maybe my 20-30k LOC projects aren't big enough to see it?
For me the abstraction works very well. The abstraction is used to keep the complexity low(er).
And the different ways of using OOP are a plus-point for me. (Like the Entity-Component system)
I don't know enough about functional programming to be able to say it's better or worse, but the ideas behind it a perfectly usable in languages like C#.
So if any of you have a good concrete reason to not use OOP, please feel welcome to tell me in the comments :)12 -
Technical phone screens be like, "we see you have years of OOP experience, but can you tell us about the differences between an interface and an abstract class?"
Yes. Yes I can. Can you tell me why you're asking such basic questions? Is this something people actually don't know this late in the game?7 -
7 page resume
13 jobs, some only lasting 3 months
TONS of grammatical and spelling errors.
Descriptions of each job has several lines just saying he "created functions; interfaces; abstract classes; classes".... For a jr/senior level developer job? Why are we interviewing him?8 -
So, company I work at, is on desperate need of PHP developers, who can work in WordPress and Magneto. Company announced vacancy.
Only 20 CVs were dropped 4 days before from today. So company called all of them for interview and I was one of the interviewer. Most of applicants told me that they know Laravel but not WordPress.
I was like fine. Maybe they can work on WordPress too. But I was wrong. Here are some funny interviews:
Me: how many types of inheritance does PHP support?
Applicant 1: 7. Single, multiple, etc..
Me: Do you know difference between interface and abstract class?
Applicant 2: (he just said some gibberish)
Me: why do u prefer Laravel to WordPress?
Applicant 3: because by default Laravel support payment gateway, so we can create e commerce application faster. WordPress doesn't support payment gateway.
Me: how many WordPress site you have worked on?
Applicant 4: I have 4 themes in WordPress.org
Me: Do you create all of them by yourself?
Applicant 4: Yes
Me: Do u know difference between require and include?
Applicant 4: No
Me: Do u know difference between query_posts and WP_Query?
Applicant 4: No
Me: (facepalm)6 -
There is this abstract class with a single public method in it.
Above it a comment, change back to protected ASAP.
That comment is from 20131 -
dates are just an index of time
practicing is just offsetting your initial, natural ability in a positive direction
do you guys ever just think of things in an abstract sense?
what are other examples?16 -
@SUKMIKEHOK! !! !!
KNOW THIS
LIFE IS BEAUTIFUL ONLY WHEN YOU FOCUS ON THE RIGHT PEOPLE
THIS IS YOUR MENTALLY HEALTHY SELF FROM THE FUTURE
LISTEN TO ME
I KNOW WHAT I AM SAYING IN THIS POINT OF TIME
FOCUS. ON. THE. RIGHT. PEOPLE.
YOU WILL UNDERSTAND THE ABSTRACT MEANING OF MY MESSAGE.
I WISH YOU ALL THE BEST IN YOUR CURRENT NOW.
STAY STRONG MY FRIEND YOU WILL GET THROUGH ALL OF THIS BULLSHIT.
SEE YOU IN THE FUTURE.
GOOD LUCK MY FRIEND.12 -
Upon reflection, I think that the amount of math I learned in school pales in comparison to the amount I learned about LaTeX. I could pretty reliably recreate the textbook rendition of the problem. Maybe it's just me but just knowing the solution felt too abstract. I want a solid looking execution of it.
I'm graduating today so I don't know how relatable this is for everyone else. I'm just reflecting.3 -
For a .net developer is it normal not to know what an abstract class is? I interviewed someone today that didn't know, and a colleague told me it wasn't that unusual.
To me this is the same level as knowing what an interface is12 -
My new coworker: That "I know everything about all and I'm better than you" kind. Is working on Accounting but already has her fingers on my work, telling my boss things like "that's easy to do"...
Of course, she knows absolutely nothing about programming and I.T., but is easy for my boss to believe an easy lie than a complex truth.
(sorry, crude language and caps follows)
Hey, listen you fucking excuse of person, DO YOUR FUCKING JOB and stay away of my DAMN GOOD FUCKING CODE and my FUCKING SERVERS.
Not going to give you admin access in a gazillion years, even if my life depends on it.
And stop saying nonsenses about things that you WILL NEVER UNDERSTAND, because those things are too complex and abstract for your little stupid mind to understand.
Go ahead, mess with me! Will sue you to the end of your FUCKING world!
Thanks girls/guys/lasses/lads.
This is absolutely therapeutical.4 -
Abstract anything dealing with external services where if they go out of business, change their internal policies, or you get a wild hair up your ass you won't have to change your entire code base later.3
-
Hello my Friends.
TL;DR i meditate as I draw, here’s the result. What about you?!
Does any of you exercise on any kind of meditation? Not the popular meditation forms, more alternative meditation? I. E. walking meditation, dancing meditation, reading medidation, etc. ? Remember, it’s all about being here and now and letting go of any pre-programmed thoughts, right?
I myself, have a ritual which is performes once-twice a year. I call it drawing meditation. When daylight ends, and the moon rises, I sit at my desk in a dark room with one light, which is hanging aboce the white sheet of paper. I take black pencil, turn on some music mildly and turn off my thought receiving part of the brain. I hear every thought which is passing by, but I have no attachment to it. My hands are drawing, without my interception. It feels amazing, and I believe this method helps me to clean up some space in subconscious file system.
This activity of mine, takes strangly short/long time. Once I’ve sat for about 16hours, once 6hours.
Furthermore, I’m always amazed by the abstract art pieces which are the end result. I’m attaching the image of the last drawing made in this way to the post.
Can I hear what you see in it?10 -
Haven't used it since and hopefully never will again, but understanding recursion and keyboard input in Assembly (uni project)
After a long (4 days) sleepover with my friends, with 14 hours a day of slamming our heads against abstract registers, we could finally program the factorial and take floating numbers as input and output them on the screen. It was nothing but pain, but the moment we got it, the sky had opened before us :D
Never again3 -
dev, ~boring
This is either a shower thought or a sober weed thought, not really sure which, but I've given some serious consideration to "team composition" and "working condition" as a facet of employment, particularly in regard to how they translate into hiring decisions and team composition.
I've put together a number of teams over the years, and in almost every case I've had to abide by an assemblage of pre-defined contexts that dictated the terms of the team working arrangement:
1. a team structure dictated to me
2. a working temporality scheme dictated to me
3. a geographic region in which I was allowed to hire
4. a headcount, position tuple I was required to abide by
I've come to regard these structures as weaknesses. It's a bit like the project management triangle in which you choose 1-2 from a list of inadequate options. Sometimes this is grounded in business reality, but more often than not it's because the people surrounding the decisions thrive on risk mitigation frameworks that become trickle down failure as they impose themselves on all aspects of the business regardless of compatibility.
At the moment, I'm in another startup that I have significantly more control over and again have found my partners discussing the imposition of structure and framework around how, where, why, who and what work people do before contact with any action. My mind is screaming at me to pull the cord, as much as I hate the expression. This stems from a single thought:
"Hierarchy and structure should arise from an understanding of a problem domain"
As engineers we develop processes based on logic; it's our job, it's what we do. Logic operates on data derived from from experiments, so in the absence of the real we perform thought experiments that attempt to reveal some fundamental fact we can use to make a determination.
In this instance we can ask ourselves the question, "what works?" The question can have a number contexts: people, effort required, time, pay, need, skills, regulation, schedule. These things in isolation all have a relative importance ( a weight ), and they can relatively expose limits of mutual exclusivity (pay > budget, skills < need, schedule < (people * time/effort)). The pre-imposed frameworks in that light are just generic attempts to abstract away those concerns based on pre-existing knowledge. There's a chance they're fine, and just generally misunderstood or misapplied; there's also a chance they're insufficient in the face of change.
Fictional entities like the "A Team," comprise a group of humans whose skills are mutually compatible, and achieve synergy by random chance. Since real life doesn't work on movie/comic book logic, it's easy to dismiss the seed of possibility there, that an organic structure can naturally evolve to function beyond its basic parts due to a natural compatibility that wasn't necessarily statistically quantifiable (par-entropic).
I'm definitely not proposing that, nor do I subscribe to the 10x ninja founders are ideal theory. Moreso, this line of reasoning leads me to the thought that team composition can be grown organically based on an acceptance of a few observed truths about shipping products:
1. demand is constant
2. skills can either be bought or developed
3. the requirement for skills grows linearly
4. hierarchy limits the potential for flexibility
5. a team's technically proficiency over time should lead to a non-linear relationship relationship between headcount and growth
Given that, I can devise a heuristic, organic framework for growing a team:
- Don't impose reporting structure before it has value (you don't have to flatten a hierarchy that doesn't exist)
- crush silos before they arise
- Identify needed skills based on objectives
- base salary projections on need, not available capital
- Hire to fill skills gap, be open to training since you have to pay for it either way
- Timelines should always account for skills gap and training efforts
- Assume churn will happen based on team dynamics
- Where someone is doesn't matter so long as it's legal. Time zones are only a problem if you make them one.
- Understand that the needs of a team are relative to a given project, so cookie cutter team composition and project management won't work in software
- Accept that failure is always a risk
- operate with the assumption that teams that are skilled, empowered and motivated are more likely to succeed.
- Culture fit is a per team thing, if the team hates each other they won't work well no matter how much time and money you throw at it
Last thing isn't derived from the train of thought, just things I feel are true:
- Training and headcount is an investment that grows linearly over time, but can have exponential value. Retain people, not services.
- "you build it, you run it" will result in happier customers, faster pivoting. Don't adopt an application maintenance strategy
/rant2 -
Bad managers, rude clients and annoying colleagues...
A lot of the stories here I read have at least any of the words listed above. My advice to most of you guys is: LEAVE.
And do it NOW.
The thing is, most of the stuff you're complaining about won't change. And you will be stuck there longer than you want to be and/or notice, trust me i've been there.
Especially the rude client part is where I've had lots of experience in, you have to search for a company which will abstract that layer for you. If you're on here most likely you're a developer and not everybody is a team lead. So why the F in hell are you even in conversations about budget and/or are you doing the most of the talking in the retrospective? If your project manager is ANY good he is doing that all for you.
There is so much to choose from (my experience in western countries) so please dont be stuck in a dead end job. Or start freelancing or whatever..8 -
When I was in college OOP was emerging. A lot of the professors were against teaching it as the core. Some younger professors were adamant about it, and also Java fanatics. So after the bell rang, they'd sometimes teach people that wanted to learn it. I stayed after and the professor said that object oriented programming treated things like reality.
My first thought to this was hold up, modeling reality is hard and complicated, why would you want to add that to your programming that's utter madness.
Then he started with a ball example and how some balls in reality are blue, and they can have a bounce action we can express with a method.
My first thought was that this seems a very niche example. It has very little to do with any problems I have yet solved and I felt thinking about it this way would complicate my programs rather than make them simpler.
I looked around the at remnants of my classmates and saw several sitting forward, their eyes lit up and I felt like I was in a cult meeting where the head is trying to make everyone enamored of their personality. Except he wasn't selling himself, he was selling an idea.
I patiently waited it out, wanting there to be something of value in the after the bell lesson. Something I could use to better my own programming ability. It never came.
This same professor would tell us all to read and buy gang of four it would change our lives. It was an expensive hard cover book with a ribbon attached for a bookmark. It was made to look important. I didn't have much money in college but I gave it a shot I bought the book. I remember wrinkling my nose often, reading at it. Feeling like I was still being sold something. But where was the proof. It was all an argument from authority and I didn't think the argument was very good.
I left college thinking the whole thing was silly and would surely go away with time. And then it grew, and grew. It started to be impossible to avoid it. So I'd just use it when I had to and that became more and more often.
I began to doubt myself. Perhaps I was wrong, surely all these people using and loving this paradigm could not be wrong. I took on a 3 year project to dive deep into OOP later in my career. I was already intimately aware of OOP having to have done so much of it. But I caught up on all the latest ideas and practiced them for a the first year. I thought if OOP is so good I should be able to be more productive in years 2 and 3.
It was the most miserable I had ever been as a programmer. Everything took forever to do. There was boilerplate code everywhere. You didn't so much solve problems as stuff abstract ideas that had nothing to do with the problem everywhere and THEN code the actual part of the code that does a task. Even though I was working with an interpreted language they had added a need to compile, for dependency injection. What's next taking the benefit of dynamic typing and forcing typing into it? Oh I see they managed to do that too. At this point why not just use C or C++. It's going to do everything you wanted if you add compiling and typing and do it way faster at run time.
I talked to the client extensively about everything. We both agreed the project was untenable. We moved everything over another 3 years. His business is doing better than ever before now by several metrics. And I can be productive again. My self doubt was over. OOP is a complicated mess that drags down the software industry, little better than snake oil and full of empty promises. Unfortunately it is all some people know.
Now there is a functional movement, a data oriented movement, and things are looking a little brighter. However, no one seems to care for procedural. Functional and procedural are not that different. Functional just tries to put more constraints on the developer. Data oriented is also a lot more sensible, and again pretty close to procedural a lot of the time. It's just odd to me this need to separate from procedural at all. Procedural was very honest. If you're a bad programmer you make bad code. If you're a good programmer you make good code. It seems a lot of this was meant to enforce bad programmers to make good code. I'll tell you what I think though. I think that has never worked. It's just hidden it away in some abstraction and made identifying it harder. Much like the code methodologies themselves do to the code.
Now I'm left with a choice, keep my own business going to work on what I love, shift gears and do what I hate for more money, or pivot careers entirely. I decided after all this to go into data science because what you all are doing to the software industry sickens me. And that's my story. It's one that makes a lot of people defensive or even passive aggressive, to those people I say, try more things. At least then you can be less defensive about your opinion.53 -
Android dev job question:
"Describe the activity lifecycle and write an application that does x,y,z in accordance with it"
Fullstack dev job question:
"Write some code that interacts with our API and does x,y,z, put the data into our database and build a web interface"
Java backend dev interview :
"BUILD AN ELEVATOR ALGORITHM WITH LESS THAN o(nlog(n)), FIND NEIGHBORS IN A BINARY TREE, WHAT IS THE DIFFERENCE BETWEEN AN INTERFACE AND ABSTRACT CLASS?"
Why?5 -
Any Haskell programmers here?
I started to learn this language for fun two days ago and so far I find it absolutely amazing and really different to OOP languages. Most of the time the solutions make so much sense, but actually coding them requires really abstract thinking of the problem. How fast did you learn Haskell? How long it took you do code it comfortably? Any advises you can give me? I work mainly through a uni exercise sheet from a friend from a different uni, and the rest is hoogle and google :P10 -
Hey guys, I have a serious question for you: How do you define science?
And yes this is going to be a long Rant. This topic really pisses me off.
A bit of context first. I come from a "humanities" background. I study history and dude, I love it. The problem is that even though we fucking pull our brains out studying historical phenomena with a fucking ton of conceptual tools, our work is mostly seen as literature to entertain the elderly during their lonely evenings. But that's not really the point of this rant.
My fucking problem is that while we try to do some serious work; actual work that could help society for real, it all goes into that magical fucking kingdom called "humanities". HOW THE FUCK DO THEY DARE TO CALL SOMETHING "HUMANITIES". IT'S A FUCKING HISTORICAL TERM THAT MEANS "TO FULFILL MEN IN ALL IT'S ASPECTS", AND NOW THEY'VE REPURPOSED IT, MAKING IT CONTAIN ANY STUDY THAT ISN'T "EMPIRICAL", "OBJECTIVE", ADD ANY FUCKING SCIENTIFIC DELUSIONARY TERM YOU CAN THINK OF.
And don't get me started on "objectivity". Oh boy, your fucking objectivity is hollow as a kid's balloon. There is no such thing as a objective study, even when it applies your "rational" "godly" scientific method. Some guys follow that shit as if it was a fucking religion. I do understand it's useful and all that, but in the end it's just a tool, you can't fucking define "science" by it's tools.
"""Q: What is carpintery?
A: Well, it's hammers, nails and wood. Yep. Hammers, nails and wood."""
THE SCIENTIFIC METHOD WAS FUCKING INVENTED DURING THE XVIII CENTURY, WHAT THE FUCK DO YOU THINK WAS GALLILEI BEFORE THAT? "HUMANITIES"?
Why do I say objectivity isn't posible? Well, guess what? YOU ARE FUCKING HUMAN. Every thing you know is full of preconceptions and fucking cultural subjectivities invented to understand the world. And it's ok, becouse if you understand your own subjectivity, at least you can see yourself in a critical sense, and at least "tend" to objectivity, in the same way functions tend to infinity.
And here comes the best part: people studying "cs" in my university pass most of the time studying a ton of shit that isn't really science, but is taken as scientific becouse it is related to "science". These guys spend entire semesters just learning programming fundational stuff that in my opinion isn't really science, it's just subjective conceptual constructs built to make the coding process better. They only have TWO fucking classes on discrete mathematics and another 3 or 4 in actual scientific fields related to computing. THESE GUYS AREN'T FUCKING BEING TAUGHT TO BE COMPUTER SCIENTISTS; THEY ARE TEACHING THEM TO BE PROGRAMMERS. THERE'S A HUGE DIFFERENCE BETWEEN CS AND PROGRAMMING AND THAT IS THE WORD SCIENCE. And yes, I'm being drastic on the definition of science on purpose becouse guess fucking what? I'M PISSED OFF.
"Hey, what are you doing?"
"Just doing science with scrum and agile development."
I understand most of you guys would think of science as "the application of the scientific method", "Knowledge by experimentation and peer-review", "anything techy". Guys, science is a lot broather than that. I define it as "the search for truth", mainly becouse that's what we are all doing, and what humans have been doing to gain knowledge through the ages. It doesn't matter what field of truth you are seeking as long as you do it seriously and with fundaments. I don't fucking care if you can't be objective: that's impossible. Just acknowledge it and continue investigating accordingly.
I believe during the last centuries the concept of science has been deformed by the popular rise of both natural and applied sciences. And I love the fact that these science fields have been growing so much all this time, but for fucks sake don't leave every other science (science as I define it) behind. Governments and corporations make huge mistakes becouse they don't treat history, politics and other sciences seriously. Yes, I called history a "science", fuck you.
And yes, by my definition programming is not a science. I don't know what most of you think programming is, but for me it's a discipline that builds stuff, similar to carpintery or blacksmithing. Now if you are pushing the limits, seeking ways to make computing go further, then that's science. The guys that are figuring out AI are scientists, the guys that are using it to detect hotdogs aren't - unless they are the same person- deal with it. I guess a lot of you guys are with me on this point.
In the end, we are all artisans building abstract tools by giving orders to a machine.
I still have some characters left, so I want to thank the community as a whole for letting me vent my inner rage. I don't have much ways to express myself on these matters, so for me DevRant is a bless.8 -
Talking to a second year student about what they've learnt so far, and what they should learn next:
"Cool, so what general topics would you say you know really thoroughly at the moment?"
"Oh, I've now learnt Java, C#, C, C++, Rust, Javascript, node.js, HTML, CSS, Angular, Vue, Erlang and probably a bunch of other stuff I've forgotten. What do you think I should concentrate on next?"
"Hmm. Probably best to take just one of those and learn it really thoroughly."
"...but I already know them all really thoroughly."
"Ok. Can you explain what an abstract class is in say Java, C# or C++?"
"Sure, I can create a new class called abstract and then use it for abstraction. I do that loads."
...🤷♂️🤦♂️
First lesson: Stop BS'ing. Might work for flexing to non-devs, but that's about it.10 -
Ye, so after studying for an eternity and doing some odd jobs here and there, all I can show for are following traits:
* Super knowledgeable in arm/Intel assembly language
* C-Veteran with knowledge of some sick and nasty C-hacks/tricks which would even sour the mood of your grandma
* Acquired disdain of any and all scripting languages (how dare you write something in one line for which I need a whole library for!)
* All-in-all low-level programmer type of guy (gimme those juicy registers to write into!)
After completing the mandatory part of my computer science studies, all I did was immerse myself into low-level stuff. Even started to hold lectures and all.
Now I'm at the cusp of being let free into the open market.
The thing is: I'm pretty sure that no company is really interested in my knowledge, as no one really writes assembly anymore.
Sure, embedded programming is still a thing, but even that is becoming increasingly more abstract, with God knows how many layers of software between the hardware and the dev, just to hide all the scary bits underneath.
So, are there people in here who're actually exposed to assembly or any hands-on hardware-programming?
Like, on a "which bit in which register/addr do I need to set" - kind of way.
And if so, what would you say someone like me should lookout for in a company to match my interest to theirs?
Or is it just a pipe dream, so I'd need to brace myself to a mundane software engineer career where I have to process a ticket at a time?
(Just to give a reference: even the most hardware-inclined companies I found "near" me are developing UIs with HTML5 to be used in some such environment ....)12 -
Holy shit. In a meeting that literally makes no sense. We're taking credit for work by claiming story points. Story points. How the hell does that work? Especially since we have told management CONSTANTLY that story points are abstract LOE shit and NOT time spent. Yet I suggest if we REALLY want to estimate who worked what we track time spent I get shot down. You can't get a concrete measurement from an abstract concept. Also, we're being encouraged to argue over who does what? What does THAT help? AND we're not even reestimating if we over or under estimating, but being forced to massage our numbers into the estimate. What the fuck?4
-
tl;dr Do you think we will any time soon move from editing raw source code? Will IDE or other interfaces allow us to change the code in graphic representation or even through voice?
---
One thing I found funny watching Westworld is how they depicted the "programming" - it is more like swiping on a smartphone, a bit maybe like Tom Cruise's investigations in Minority report. Or giving certain commands and key words by voice.
There was one quote from Uncle Bob's "Clean Code" I could never find again, where he said something along the lines, that back in the seventies or eighties they thought they would soon raise programming languages to such a high level they would use natural language interfaces, and look at us now, still the same "if's".
So I feel uncomfortable without my shell and having tried a graphical programming language once this particular (Labview) seemed clumsy to me at best. But maybe there are a lot of web devs here and it seems with them frameworks you might be able to abstract away a lot of the pesky system programming... so do you feel like moving to some new shiny programming experience or do you think it will stay the same for more decades as the computer is that stupid machine where you have to spill it out instruction by instruction anyways?7 -
If I ever get the chance to start my own company or pick out the dev team I work with... I will never, ever, ever work with anyone who doesn't understand how to abstract out a problem. Our prod DB is a mess and our API is a mess because we left it to some dudes who are dumb as shit and doing everything ad-hoc. Now their ad-hoc shit doesn't work anymore and I get to clean it up. 😫😞FML
-
GOD ALMIGHTY I HATE SWIFT & XCODE...
Why the fuck does it take a horrendous amount of time to muck about with layout constraints. Why the heck does xcode choose to add constraint layouts to elements that already have pissing constraints! Why does dealing with something as trivial as tables have to be so god damn fucking involved when HTML and CSS let me create and style tables in fuck all lines.
And what the hell is up with how pissing long xcode takes just to figure out that 1 extra line of code I've just added. You jump to another file and xcode finally decides to be an ide again and bitch at the fact that you've forgotten to add some parameter or that they've decided to rename paramter "x" since version fuck nows what.
Working with abstract classes is fun, lets use protocols (because interfaces are too old school) and then lets tack on something we call extensions and then lets make people piss about with convenience initializers.
And lord almighty, what the fuck is up with casting, what all this ?! BS. What's wrong with just checking if the value is null in the first place, or whats wrong with giving something an initial value, oh because having to unwrap shit is more elegant right??
And good god, I need to own a fucking cinema screen just to have the storyboard open, there's less fucking panels on the Sistine Chapel ceiling
then there is in xcode.1 -
i think it's a waste of time and resources to memorize syntax and other stuff you can google. since we have a lot of material available, we should focus on logic, more abstract concepts, stuff you can't copy paste. well, I think that should be the way in every area, not only CS15
-
I wrote an auth today.
Without frameworks. Without dependencies. Without under-the-hood magic. Without abstract pluggable adaptor modules for the third-party auth library with 63 vulnerabilities and 1252 GitHub issues. Without security vulnerabilities showing up in NPM log. Without dependency of a dependency of a dependency using md5 and Math.random() under the hood for historical reasons, and now we're fucked, because this is the only lib for our framework, and we have no time to write our own replacement. Without all that shit.
Rock-solid, on top of scrypt. Stateless and efficient.
It felt amazing.9 -
I just spent an hour troubleshooting an error message which I perceived to have some kind of abstract meaning.
Overthinking idiot, it couldn't have been more literal.
After the fix to one stupid line, I quietly watch that hour of my life sail away on a sad river of anguish, never to return again.3 -
When you go to an architecture meeting and people's statements are so abstract that they could apply to any product on the face of the earth.1
-
HTML is the core building block of the web. Why does everyone feel the need these days to abstract and virtualize and recreate the wheel? You’re only slowing down your site...plus adding layers of confusion for new comers and adding more code to maintain.12
-
Update on the API based game that I’m working on.
All of the game logic and API is mostly done.
Here is a gif which shows a few turns with a very simple "AI" vs a passive bot.
I’m bad at graphics so a went for a more abstract UI:
The arrows represent the looking direction of the units and the black dots represent the direction of the shots being fired at a particular turn. Units can look and move and shoot in different directions in one turn.
https://devrant.com/rants/10176221/...10 -
Manager:
Hey this client sent us a list with all of their employees in this format... we would tell them to input it themselves but they're a pretty big client, so could you do it?
Me: Sure
*3 hours later*
... why am I taking so long...?
I look back at my code, and see that I've done a whole framework to input data into our system, which accepts not only the client's format but it's actually pretty abstract and extensible for any format you'd like, all with a thorough documentation.
*FACEPALM*
Why can I do this with menial jobs and not for our main code?3 -
When are people going to understand that programming is not about quickly putting something together?
Programming may have its utility in helping us out building solutions, but that's a secondary function of it.
Ultimately and abstractly, as MIT professors said, it's about the imperative paradigm of solving problems.
I really dislike it when people treat programming as if it were a toolbox. It is a great engineering feat. That's like saying math is just about numbers. No, it is about concepts. We're thinkers, not doers.4 -
-- What if JavaScript never existed?
-- What if HTML was a programming language?
-- What if our data online isn't abstract but physical?
-- What if geeks have their own country?
-- What if humans exist and we are the aliens?
-- What if the internet is state-owned?
-- What if we could download food just like every other downloadables?
-- What if my VSCode won't kill me when switched to light theme?
-- What if there was no gender and the word "female" is just an alias for "male"?
-- What if bugs could find and fix themselves?
-- What if there's no need for an account password?
-- What if Linux was owned by Microsoft?
-- **What if I could tell my boss that I'm tired of his fucking job without actually telling my boss? This is the actual what if.**27 -
Currently learning Kotlin, coming from Java. Just spent half an hour wondering wtf was wrong with
abstract fun add(E element)
Kill me2 -
Encapsulate tasks
To abstract your case,
Full of the catharsis
And exceptions to face.
Didn't commit, oh wait,
More trouble? One reset.
We return and all hail
This programming mindset!3 -
I had a phone interview with a small startup for a Web Development role. I was fairly confident that I would pull through most of the technical questions that would come my way.
They instead asked me a stupid optimization problem involving some buckets, pigs and poison. I answered it, told them to fuck off and ask me something relevant.
Except that I didn't. I fumbled to find a half decent answer to it and they were unimpressed. The worst part was that I could think of a dozen better answers after the call was over.
Doesn't seem particularly fair for people to judge you by such abstract questions rather than evaluating skills directly relevant to your job.2 -
Worst architecture I've seen?
The worst (working here) follow the academic pattern of trying to be perfect when the only measure of 'perfect' should be the user saying "Thank you" or one that no one knows about (the 'it just works' architectural pattern).
A senior developer with a masters degree in software engineering developed a class/object architecture for representing an Invoice in our system. Took almost 3 months to come up with ..
- Contained over 50 interfaces (IInvoice, IOrder, IProduct, etc. mostly just data bags)
- Abstract classes that implemented the interfaces
- Concrete classes that injected behavior via the abstract classes (constructors, Copy methods, converter functions, etc)
- Various data access (SQL server/WCF services) factories
During code reviews I kept saying this design was too complex and too brittle for the changes everyone knew were coming. The web team that would ultimately be using the framework had, at best, vague requirements. Because he had a masters degree, he knew best.
He was proud of nearly perfect academic design (almost 100% test code coverage, very nice class diagrams, lines and boxes, auto-generated documentation, etc), until the DBAs changed table relationships (1:1 turned into 1:M and M:M), field names, etc, and users changed business requirements (ex. concept of an invoice fee changed the total amount due calculation, which broke nearly everything).
That change caused a ripple affect that resulted in a major delay in the web site feature release.
By the time the developer fixed all the issues, the web team wrote their framework and hit the database directly (Dapper+simple DTOs) and his library was never used.1 -
Did I ever tell anyone how much I hate phone interviews? I have had them where people were on speaker phone and I could hardly understand them, foreign accents I could not understand or people reading questions off of the internet. I usually have to do these while walking around the parking lot on my job. My hands and ears freezing in the cold or 100+ degrees in the summer. I just hate it. Now I feel better. Oh yeah I have a country accent so I am doomed from the start anyway. ByVal or ByRef ? Difference between abstract and interface? Here we go again.
-
Yesterday, I put the final touches on a massive system using hundreds of classes, with thousands of lines of code, all easily maintained because of the way I used abstract classes, and coding to an interface, stubs, etc. And all instantiated with a near english fluent api. With detailed logging and even contacts me when there's problems, result of a year's work. I felt like a genius
Today, this fucking simple contact form that won't do what I want it to for the past 4 hours...1 -
whenever i tell my dad about a technology that is going way beyond our imagination and tell him about the consequences of it and how we should worry about that
then he watches some random tv show about internet security/cyber security and various algorithms (very abstract) which are currently changing the world and how we should care about our data and what the consequences of X technology is...
he be like: "oh is that true? that's interesting, how does that work?"
i'm like😑 dad, i already told you about that😩
ever had similar experience?1 -
Taught myself assembler at 13 (this was the mid 1980s) and wondered how the hell people could stand to do this. Then I found out there were more abstract languages like BASIC or COBOL. So I taught myself BASIC and MS-DOS batch scripting. Various other languages came later (PROLOG, Pascal, C, Smalltalk, C++, VisualBasic, etc). But it’s never been easy for me because I suck at math and complicated logic structures. Especially not good with OOP. My brain was ruined by learning procedural coding first. It refuses to incorporate OOP.
-
One inappropriate experience I can think of is during an internship at a multinational company that made networking and electrical components. My mandate was to do an analysis on the electrical performance of the company's products versus the competitors. It took me something close four months to measure, to compile data, do an analysis and create a report.
Then came the time to show the results to the engineering director. Let's say the news were not good, so I figured people should have their hears opened. Anyways, my supervisor and I made a presentation to abstract the main points so the information was not too difficult to process.
10 minutes into the presentation, the director of engineering just fell asleep and was snoring quite loudly. I asked my supervisor "should we wake him up?" and so we did. When he woke up, he asked us to wrap it up and pretty much gave no fucks about the results or the presentation. Nobody really cared about the results after that. Talk about wasted time lol.
Luckily I don't work at this shithole of a company today.2 -
had an interview at a place that went good at the technical part but I didn't do great at their 'abstract' questions. the guys interviewing were complete stone faced as well, no personality, pretty sure I wouldn't have liked working there anyways. a few years later and they are still looking for people. the recruiter rings up and I said I wouldn't want to re-interview unless the process had changed. he guaranteed me it had. so I went back in and it was exactly the same. exactly the same technical questions, followed by more abstract questions. different guys but same no-personalities. never going back
-
I'm currently learning design pattern and was looking to understand the basic difference between Factory and Abstract Factory patterns. So the latter is typically used as a factory to procude factories...1
-
You add a pure virtual function to a abstract class and then you realize that class have have been inherited by 23 other classes and you add implementation to all of them. 😕😕😕
-
A full day discussion with 'non-designers' to decide on a repeatative abstract image that is to be used for background in a website.
A fcking full day..
What the hell!!
And the final selected image was the same that we started with.1 -
Not sure if it's the worst code review but it's a recent one.
We don't really do code reviews where I work unfortunately but my coworker used my framework for the first time (build some nice composer libraries for cmdline projects) and asked if I could make them do autoloading.
He never used namespaces before so I was glad to help him out.
What I saw was a dreadful mess. His project was called "scripts" so good luck picking a namespace...
Than it was all lose functions in the executable file. All those functions are however called by a class in another file (if they where not calling eachother as a cascading mess). That class was extending an abstract class from my library as instructed. However I never imagined my lib being raped like that.
The functions themselves are a horrible mess. Nothing uniform completely different style (our documentation states PSR's should be used).
Parameters counts higher than 5.
Variable names like Object and Dobject (in calling function Dobject is Object but it needs a fresh one.
If statements on parameters that need basically split it in two (should simply be to functions)
If else statement with return of same variable as a single line (sane people use ternary for that)
Note that I said functions. All of it should have been OO and methods. Would have saved at least some of the parameter hell.
I could go on and on. Do I think the programmer is bad yes (does not even grasp interfaces, dep injection, foreach loops). Is this his best work no. He said that for a one of script like this it just has to work. Not going to be used elsewhere. I disagree as it is a few thousand lines of code that others have to read too.2 -
That #facepalm moment when the person you are interviewing has 2 years of experience, rates himself 8/10 in JAVA and doesn't know the difference between abstract class and interface!4
-
I still remember the moment when I found out that there's something other than Internet Explorer ("The Internet program" back then for me), named Firefox (v2.7).
It was simple stuff like tabs that fascinated me, it's an experience similar to learning a second language and opening up your mind and understand the abstract idea of everything.1 -
By making these shitty languages that basically abstract away anything difficult, Python, Javascript whatever, we've only enabled shit code to hit production which inevitably one day will either blow up or just add eternal technical debt. Even worse is when an MBA gets power to enable this.8
-
I need to stop treating an OO language as if it were a procedural language.
I have the tendency to turn my code into GOTO spaghetti even though I'm semi-aware that objects exist and that they are distinct.
I still have to get used to this paradigm.
My Java professor always swore by the Plato paradigm, i.e.:
""Platonism" and its theory of Forms (or theory of Ideas) denies the reality of the material world, considering it only an image or copy of the real world.
According to this theory of Forms there are at least two worlds: the apparent world of concrete objects, grasped by the senses, which constantly changes, and an unchanging and unseen world of Forms or abstract objects, grasped by pure reason (λογική). which ground what is apparent." (wikipedia)
Thinking in objects, abstractions and metaphysics is not something I haven't done before (I've practiced it during Sociology and Ethics with the whole Pascal Leibniz, Newton and DesCartes approach) but it's certainly not easy.
Then there was my cool Programming 201 professor who said: "Don't worry man, just read those great UML, Program Design and GOF books and it will all become easy, like a story. It'll all make sense.
I mean, I've graduated, I've passed my Software Engineering I, II and III (hard as hell) but since I haven't focused on those theories and practices anymore, I've lost my touch.
It's definitely not easy for a novice programmer to transition between paradigms..10 -
Hello devRant!
Man its been a while, i havent logged in here in like 4 years.
Recently ive been getting into home-labbing, and i thought to myself
"all of these people on youtube/reddit run Plex on pre-built NASs that have awful celerons and whatnot, we can do much better!"
And by "much better" i meant a bare metal k8s cluster.
My hybris knows no bounds apparently.
Turns out this shit is quite hard.
Really gives u an appreciation of just how much stuff cloud providers magically abstract away....
My final goal is to run stableDiffusion on this thing, even know i know full-well the moment i try Nvidia will fuck me raw with some hidden enterprise subscrition :) -
This started as an update to my cover story for my Linked In profile, but as I got into a groove writing it, it turned into something more, but I’m not really sure what exactly. It maybe gets a little preachy towards the end so I’m not sure if I want to use it on LI but I figure it might be appreciated here:
In my IT career of nearly 20 years, I have worked on a very wide range of projects. I have worked on everything from mobile apps (both Adroid and iOS) to eCommerce to document management to CMS. I have such a broad technical background that if I am unfamiliar with any technology, there is a very good chance I can pick it up and run with it in a very short timespan.
If you think of the value that team members add to the team as a whole in mathematical terms, you have adders and you have subtractors. I am neither. I am a multiplier. I enjoy coaching, leading and architecture, but I don’t ever want to get out of the code entirely.
For the last 9 years, I have functioned as a technical team lead on a variety of highly successful and highly productive teams. As far as team leads go, I tend to be a bit more hands on. Generally, I manage to actively develop code about 25% of the time to keep my skills sharp and have a clear understanding of my team’s codebase.
Beyond that I also like to review as much of the code coming into the codebase as practical. I do this for 3 reasons. I do this because as a team lead, I am ultimately the one responsible for the quality and stability of the codebase. This also allows me to keep a finger on the pulse of the team, so that I have a better idea of who is struggling and who is outperforming. Finally, I recognize that my way may not necessarily be the best way to do something and I am perfectly willing to admit the same. I have learned just as much if not more by reviewing the work of others than having someone else review my own.
It has been said that if you find a job you love, you’ll never work a day in your life. This describes my relationship with software development perfectly. I have known that I would be writing software in some capacity for a living since I wrote my first “hello world” program in BASIC in the third grade.
I don’t like the term programmer because it has a sense of impersonality to it. I tolerate the title Software Developer, because it’s the industry standard. Personally, I prefer Software Craftsman to any other current vernacular for those that sling code for a living.
All too often is our work compiled into binary form, both literally and figuratively. Our users take for granted the fact that an app “just works”, without thinking about the proper use of layers of abstraction and separation of concerns, Gang of Four design patterns or why an abstract class was used instead of an interface. Take a look at any mediocre app’s review distribution in the App Store. You will inevitably see an inverse bell curve. Lot’s of 4’s and 5’s and lots of (but hopefully not as many) 1’s and not much in the middle. This leads one to believe that even given the subjective nature of a 5 star scale, users still look at things in terms of either “this app works for me” or “this one doesn’t”. It’s all still 1’s and 0’s.
Even as a contributor to many open source projects myself, I’ll be the first to admit that have never sat down and cracked open the Spring Framework to truly appreciate the work that has been poured into it. Yet, when I’m in backend mode, I’m working with Spring nearly every single day.
The moniker Software Craftsman helps to convey the fact that I put my heart and soul into every line of code that I or a member of my team write. An API contract isn’t just well designed or not. Some are better designed than others. Some are better documented than others. Despite the fact that the end result of our work is literally just a bunch of 1’s and 0’s, computer science is not an exact science at all. Anyone who has ever taken 200 lines of Java code and reduced it to less than 50 lines of reactive Kotlin, anyone who has ever hit that Utopia of 100% unit test coverage in a class, or anyone who can actually read that 2-line Perl implementation of the RSA algorithm understands this simple truth. Software development is an art form. I am a Software Craftsman.
#wk171 -
I need some opinions on Rx and MVVM. Its being done in iOS, but I think its fairly general programming question.
The small team I joined is using Rx (I've never used it before) and I'm trying to learn and catch up to them. Looking at the code, I think there are thousands of lines of over-engineered code that could be done so much simpler. From a non Rx point of view, I think we are following some bad practises, from an Rx point of view the guys are saying this is what Rx needs to be. I'm trying to discuss this with them, but they are shooting me down saying I just don't know enough about Rx. Maybe thats true, maybe I just don't get it, but they aren't exactly explaining it, just telling me i'm wrong and they are right. I need another set of eyes on this to see if it is just me.
One of the main points is that there are many places where network errors shouldn't complete the observable (i.e. can't call onError), I understand this concept. I read a response from the RxSwift maintainers that said the way to handle this was to wrap your response type in a class with a generic type (e.g. Result<T>) that contained a property to denote a success or error and maybe an error message. This way errors (such as incorrect password) won't cause it to complete, everything goes through onNext and users can retry / go again, makes sense.
The guys are saying that this breaks Rx principals and MVVM. Instead we need separate observables for every type of response. So we have viewModels that contain:
- isSuccessObservable
- isErrorObservable
- isLoadingObservable
- isRefreshingObservable
- etc. (some have close to 10 different observables)
To me this is overkill to have so many streams all frequently only ever delivering 1 or none messages. I would have aimed for 1 observable, that returns an object holding properties for each of these things, and sending several messages. Is that not what streams are suppose to do? Then the local code can use filters as part of the subscriptions. The major benefit of having 1 is that it becomes easier to make it generic and abstract away, which brings us to point 2.
Currently, due to each viewModel having different numbers of observables and methods of different names (but effectively doing the same thing) the guys create a new custom protocol (equivalent of a java interface) for each viewModel with its N observables. The viewModel creates local variables of PublishSubject, BehavorSubject, Driver etc. Then it implements the procotol / interface and casts all the local's back as observables. e.g.
protocol CarViewModelType {
isSuccessObservable: Observable<Car>
isErrorObservable: Observable<String>
isLoadingObservable: Observable<Void>
}
class CarViewModel {
isSuccessSubject: PublishSubject<Car>
isErrorSubject: PublishSubject<String>
isLoadingSubject: PublishSubject<Void>
// other stuff
}
extension CarViewModel: CarViewModelType {
isSuccessObservable {
return isSuccessSubject.asObservable()
}
isErrorObservable {
return isSuccessSubject.asObservable()
}
isLoadingObservable {
return isSuccessSubject.asObservable()
}
}
This has to be created by hand, for every viewModel, of which there is one for every screen and there is 40+ screens. This same structure is copy / pasted into every viewModel. As mentioned above I would like to make this all generic. Have a generic protocol for all viewModels to define 1 Observable, 1 local variable of generic type and handle the cast back automatically. The method to trigger all the business logic could also have its name standardised ("load", "fetch", "processData" etc.). Maybe we could also figure out a few other bits too. This would remove a lot of code, as well as making the code more readable (less messy), and make unit testing much easier. While it could never do everything automatically we could test the basic responses of each viewModel and have at least some testing done by default and not have everything be very boilerplate-y and copy / paste nature.
The guys think that subscribing to isSuccess and / or isError is perfect Rx + MVVM. But for some reason subscribing to status.filter(success) or status.filter(!success) is a sin of unimaginable proportions. Also the idea of multiple buttons and events all "reacting" to the same method named e.g. "load", is bad Rx (why if they all need to do the same thing?)
My thoughts on this are:
- To me its indentical in meaning and architecture, one way is just significantly less code.
- Lets say I agree its not textbook, is it not worth bending the rules to reduce code.
- We are already breaking the rules of MVVM to introduce coordinators (which I hate, as they are adding even more unnecessary code), so why is breaking it to reduce code such a no no.
Any thoughts on the above? Am I way off the mark or is this classic Rx?16 -
Wow Angular2 you are beautiful.
I loved you early on angular 1.x but by the end we drifted apart driven by our diffrent needs. I needed a manageable code base and more excitement you needed to stay the way you are. I respect you for that, but we are not right for each other anymore.
I have been hurt Angular2 i may not fully heal but you provide me with what I need. Developing on you is a pleasure that feels like a full object orientated experience. Most of all developing on you is *fast* your seperation of concerns tickles me in all the right ways. The suger you provide with your decorators, classes, abstract classes and interfaces makes me weak at the knees.
Keep growing and improving Angular 2. I think we shall have many projects together.3 -
Python abstract classes... Looks like a pain in the ass...
I'm just gonna create a class filled with methods that just pass or throws NotImplementedException
Good enough?2 -
After playing et and wow a few year it all started when I hosted my own ts2 server with npo license. Rented a server for 90 bucks as a highschool student (13) with no job. (Who the fuck rented to me? I had my own bank account and lied about my age. Had a credit card at 14 but that's another story)
*Shit is expensive*
How does one get some value out of a server? Oh right, let's host Webspace and ftp accounts.
That got me into server administration and bash.
After dropping wow in bc i started playing on private servers.
*Shit is buggy*
How do you fix wow server? Let's learn c++ and push patches to arcemu. Why is this part crashing on this one server? Let's look at the binary. Wtf is this? Oh assembler?!? Ok let's try to read this. Ok I get it now. Let's fix the code.
Ok let's host my own wow private server. We need a website for account creation.
Let's learn php. Wait php is easy compared to mastering c++? I need an app for my first smartphone (iPhone 3g) to manage the server on the go. Let's learn how to do that. Why is this so easy? Switching to Android: wait java is even easier?
And that's how I learned that if you start with the hard part and grasp the concept, everything more abstract is significantly easier. If you start to read code to learn any language it's easier then following books (for me at least). If you get an error, track it down, you might learn amazing things in the way.
And if you want to get into reverse engineering, start by being passionate for the thing you want the reverse. It will be hard before it gets easier and you will need all the willpower you can muster not the just stop.
Programming for me is not a job but my passion. It's like I'm on vacation every day of the year (expect meetings, fuck meetings)2 -
I study both mathematics and computer science at Delft university. There's a difference between the approaches these two studies have.
Mathematics is usually about going to lectures, learning complicated stuff there and then using the obtained knowledge in a exam at the end of the course.
The CS courses are kore about engineering. They have practicals way more often than the math courses and the exams usually are of les importance.
It feels as if the "academic level" of the CS courses is lower. In math, we learn the real deep, abstract matter, while CS is more about "tinker up something nice in the practicals and you'll be fine."
I'm not sure if either approach is better, but I'm sure I like the maths version more. The CS approach is more HBO-like (HBO being the lower-level universities)
It is even that, generally speaking, the people who study maths seem more serious about studying than the cs people.
Not all of them, and no offense meant, just an observation.
Well, that was not really a rant. If you read up to here, I'm curious what you think about this.3 -
What do you think about my language choice set for the future (knowing I want to work as a software and app developer) ? Anything to add / remove ?
- C++: Fast and well-documented, so I think it's a standard even in the next decades to come
- Java: Although I think that this language will more likely die in the next decade, I'll maybe keep this language because some dinosaurs enterprises still rely on it. Ah and mainly because it's still widely used in Android apps programming. For now.
Talking about Android, does learning Kotlin worth it ?
- Python: Will mainly use it for automation and prototyping, but nothing more, as it seems not to be widely use in the software development field (or it is ?). I'll also keep it for hobbies, however.
- Rust: This language seems to be a rising star in the industry since it is very clean, classic, as fast as C / C++ while introducing more safety. However I'll wait a bit for this one since it requires more complicated and abstract knowledge I do not have yet.
- Javascript (or more particularly JSX): Hurts to say I'll keep it, even more than Java. I'd let it in the web development hell I won't step in if it was not used in webapps / cross-platform mobile applications. And since this kind of stuff looks trendy, I don't think I can avoid it. Plus, I liked working with React Native. Sorry.
- C#: Seems to be a must when working on Windows software interfaces, so guess I'll have to learn this one. Will do so gladly, it looks better than Java17 -
Ideas:
1. Scrape github
2. Attach feature size estimate (an abstract scale) as examples across many projects.
3. Use this as prompt/finetunning data.
4. Train and prompt on project descriptions relative to feature size and number of contributors/changes in the changelog.
5. Package and release a model that takes descriptions of ideas and generates reasonable estimates of time and manpower.
6. Optional, sell as an estimate service to corporate and make money introducing some sanity to the world for a change.10 -
Okay... I need to confess.
I actually like the idea of counting arrays from 1 like it is in some languages.
It makes code cleaner.
Think about it.
You would never need to subtract 1 from count/size/length or add 1 for things like the month in javascript because the first item would be at index 1 and many many errors wouldn't be happening because we don't need to force our minds to think another way. I learned counting from 1 after I learned to walk so it's the most natural thing to do. Just because the software/hardware below our language works that way doesn't mean we can not abstract this behavior away. What's your opinion about this? Am I wrong?12 -
I've been trying for the last 3 months to land my first development job. I have a good (over 3 years) amount of experience, but no industry experience and no degree. So it's been a uphill battle. Currently working at a call center making garbage and most of my time and energy is invested into this. Currently am not mobile so most of my money is being geared towards that. It's just frustrating to see all these over glorified job postings that ask so much for just entry levels. I haven't even gotten a damn interview, I feel like in houston it's either you have a degree or you are not even considered for just a fucking interview. If I can get at least one they will be able to see my drive, persistence and skills that have been developed overtime. And fuck recruiters, have been interfacing with them over linkedin and not one of them seemed eager (initially yes) to land me an interview. Most of these fucks don't even fucking understand the technology or buzzwords that are on the job posting. If I were a recruiter I would at least put a little research into what the different technologies are so the process will seem less abstract. The tech will have more meaning and maybe I would be able to get a better success rate with clients if I knew what was really required of them. Not just looking at xyz and seeing if client has experience with them, but really see if they know what they are; that way I will have more confidence sending them into an interview. But of course that's not how it works. "Oh yeah Java and javascript are very similar"... get the fuck out of here.13
-
Having a degree in math helpes immensely with programming. Abstract reasoning, calculation simplification, sussinct data representation, nice things to have.
-
If someone ask about why i put/create this kind of code. The only answer is "The Aliens told me to do so"
-
BANano, a free library that transpiles B4X (a crossplatform development tool) source code to JavaScript.
It allows users who are not fluent in JavaScript to make PWA's and dynamic Websites using a VB-like language and the Abstract Designer native to the B4X tool.3 -
To me this is one of the most interesting topics. I always dream about creating the perfect programming class (not aimed at absolute beginners though, in the end there should be some usable software artifact), because I had to teach myself at least half of the skills I need everyday.
The goal of the class, which has at least to be a semester long, is to be able to create industry-ready software projects with a distributed architecture (i.e. client-server).
The important thing is to have a central theme over the whole class. Which means you should go through the software lifecycle at least once.
Let's say the class consists of 10 Units à ~3 hours (with breaks ofc) and takes place once a week, because that is the absolute minimum time to enable the students to do their homework.
1. Project setup, explanation of the whole toolchain. Init repositories, create SSH keys for github/bitbucket, git crash course (provide a cheat sheet).
Create a hello world web app with $framework. Run the web server, let the students poke around with it. Let them push their projects to their repositories.
The remainder of the lesson is for Q&A, technical problems and so on.
Homework: Read the docs of $framework. Do some commits, just alter the HTML & CSS a bit, give them your personal touch.
For the homework, provide a $chat channel/forum/mailing list or whatever for questions where not only the the teacher should help, but also the students help each other.
2. Setup of CI/Build automation. This is one of the hardest parts for the teacher/uni because the university must provide the necessary hardware for it, which costs money. But the students faces when they see that a push to master automatically triggers a build and deploys it to the right place where they can reach it from the web is priceless.
This is one recurring point over the whole course, as there will be more software artifacts beside the web app, which need to be added to the build process. I do not want to go deeper here, whether you use Jenkins, or Travis or whatev and Ansible or Puppet or whatev for automation. You probably have some docker container set up for this, because this is a very tedious task for initial setup, probably way out of proportion. But in the end there needs to be a running web service for every student which they can reach over a personal URL. Depending on the students interest on the topic it may be also better to setup this already before the first class starts and only introduce them to all the concepts in a theory block and do some more coding in the second half.
Homework: Use $framework to extend your web app. Make it a bit more user interactive with buttons, forms or the like. As we still have no backend here, you can output to alert or something.
3. Create a minimal backend with $backendFramework. Only to have something which speaks with the frontend so you can create API calls going back and forth. Also create a DB, relational or not. Discuss DB schema/model and answer student questions.
Homework: Create a form which gets transformed into JSON and sent to the backend, backend stores the user information in the DB and should also provide a query to view the entry.
4. Introduce mobile apps. As it would probably too much to introduce them both to iOS and Android, something like React Native (or whatever the most popular platform-agnostic framework is then) may come in handy. Do the same as with the minimal web app and add the build artifacts to CI. Also talk about getting software to the app/play store (a common question) and signing apps.
Homework: Use the view API call from the backend to show the data on the mobile. Play around with the mobile project to display it in a nice way.
5. Introduction to refactoring (yes, really), if we are really talking about JS here, mention things like typescript, flow, elm, reason and everything with types which compiles to JS. Types make it so much easier to refactor growing codebases and imho everybody should use it.
Flowtype would make it probably easier to get gradually introduced in the already existing codebase (and it plays nice with react native) but I want to be abstract here, so that is just a suggestion (and 100% typed languages such as ELM or Reason have so much nicer errors).
Also discuss other helpful tools like linters, formatters.
Homework: Introduce types to all your API calls and some important functions.
6. Introduction to (unit) tests. Similar as above.
Homework: Write a unit test for your form.
(TBC)4 -
The datepicker saga
Part one
So I begin work on a page where user add their details, project is late, taking ages on this page
Nearly done, just need a component to allow users to put in some date of births. Look for react components.
Avoiding that one because fuck Bootstrap.
Ah-ha, that looks good, let's give it a go.
CSS doesn't exist, oh need copy it over from npm dist. Great it applied but...
... WTF it's tiny. Thought it was a problem with my zoom. Nope found the issue in github.com and it's something to do with using REM rather than EM or something, okay someone provided a solution, rather I saw a couple of solutions, after some hacking around I got it working and pasted it in the right location and yes, it's a reasonable size now.
Only it's a bit crap because it only allows scrolling 1 month at a time. No good. Hunting through the docs reveals several options to add year and month drop downs and allow them to be scrolled. Still a bit shit as it only shows certain years, figure I'd set the start date position somewhere at the average.
Wait. The up button on the scroll doesn't even show, it's just a blank 5px button. Mouse scroll doesn't work
Fucking...
... Bailing on that.
Part 2
Okay sod it I'll just make my own three drop down select boxes, day, month and year. Easy.
At this point I take full responsibility and cannot blame any third party. And kids, take this as a lesson to plan out your code fully and make no assumptions on the simplicity of the problem.
For some reason (of which I regretted much) I decided to abstract things so much I made an array of three objects for each drop down. Containing the information to pretty much abstract away the field it was dealing with. This sort of meta programming really screwed with my head, I have lines like the following:
[...].map(optionGroup =>
optionGroup.options[
parseInt(
newState[optionGroup.momentId]
, 10)
]
)...
But I was in too deep and had to weave my way through this kind of abstract process like an intrepid explorer chopping through a rain forest with a butter knife.
So I am using React and Redux, decided it was overkill to use Redux to control each field. Only trouble is of course when the user clicks one of the fields, it doesn't make sense in redux to have one of the three fields selected. And I wanted to show the field title as the first option. So I went against good practice and used state to keep track of the fields before they are handed off to the parent/redux. What a nightmare that was.
Possibly the most challenging part was matching my indices with moment.js to get the UI working right, it was such a meta mess when it just shouldn't have taken so stupidly long.
But, I begin to see the light at the end of this tunnel, it's slowly coming together. And when it all clicks into place I sit back and actually quite enjoy my abysmal attempt at clean and easy to read code.
Part 3
Ran the generated timestamp through a converter and I get the day before, oh yeah that's great
Seems like it's dependant on the timezone??!
Nope. Deploying. Bye. I no longer care if daylight savings makes you a day younger.1 -
When you are modifying a test to accomadate for a new class implementation and manually calculate the expected output. Theoretically, this should not be much of an issue as its parent is an abstract class.30 mintues later and still banging my head, I decide to walk my dogs and then it hits.. I calculated the expected value incorrectly, the test was fine. Time for bed , its late -_-.
-
Had a customer today that claimed that crontab did not work as it should, and he has proof of that (in form of some very abstract logs).
Well, I guess noone can rely on one of the most fundamental binary in the unix world.