Details
-
AboutDeveloper, Ops Guy, Teacher
-
SkillsPython, Go, Linux, Scheme, JavaScript, Trolling
-
LocationSwitzerland
-
Website
-
Github
Joined devRant on 2/22/2018
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
-
!rant (I got down voted for this on Stack Overflow, so I try to discuss the issue with a more professional crowd.)
In a Software Engineering class, we had an assignment to read Parnas' seminal paper on modularization [0]. In this paper, two approaches of dividing a software into modules are discussed:
Traditional Approach: A flow chart is drawn to work out the single processing steps and the program's high-level flow. Then every processing step is turned into a module. This approach doesn't yield very good results.
New Approach: Every design decision will be turned into a module by the means of information hiding. This approach leads to much better results.
My personal interpretation of the term design decision is that the modules are identified as data structures rather than as processing steps of an algorithm. This makes sense, because data structures are much more suitable for information hiding then processing steps of an algorithm. (The information inside a data structure is hidden behind functions, whereas a function only hides more detailed processing steps and no information; the information is actually passed in as arguments.)
Why does the second approach work so much better than the first approach? Here comes my second interpretation: The single processing steps of an algorithm are not replaceable (and thus not reusable), whereas it's possible to convert data structures into other data structures.
And here's my question: Could that be the reason why software development using workflow engines (based on BPMN, for example) never really took off?
My personal experience is that the activities created in such workflows are hardly ever reused, but there often are big data structures passed around all the involved activities, even if most of the activities use only one or two of them.
My question exaggerated: Could we get rid of all those clumsy workflow engines by giving managers Parnas' paper to read?
[0]: On the criteria to be used in decomposing systems into modules (Parnas 1972)2 -
Design patterns are to programming what cum swapping is to porn: The further it is carried, the nastier it gets, and at the end an innocent victim has to clean up the whole mess.4
-
The Java framework we're working with at our company is so complicated that it doubles as a steganographic device to conceal software.
-
Trying to run our Angular application today, got this error message: "Node Sass does not yet support your vurrent environment: OS X-64bit with Unsupported runtime (64)"
JavaScript frameworks cause problems on different hardware architectures and platforms. That probably was not easy to break...4 -
Group assignment: writing a own Java logger component in a group of four, using nothing else than Java SE libraries, Maven and Jenkins. The software must be able to substitute the logger component without recompilation, just by editing the config.xml (setting jar file path and fully qualified class name of the logger).
I asked around on Slack which group is ready for a component exchange, so that we could test the switch. I found another group and I started doing some testing.
Then I got a `java.lang.NoClassDefFoundError: org/apache/log4j/Logger`. I got in touch with my peer from the other group and asked him, if they've been using log4j. Apparently they did, so I told him that the assignment was to write a logger of one's own, not just using log4j. Then he told me: "Uh, ok, I'm going to tell the guy responsible for the logger part about that..."
X-D -
Group assignment in a software engineering class. Got that notorious lazy kid in my group of four who failed the class in the last term. I was perfectly aware of his reputation, but accepted him in the group nonetheless, because he already knows what needs to be done in the class.
He started to work on his assignment: mostly boilerplate code that didn't even build. He didn't even bother to fix it. I had a lot of time over the Easter weekend, so I decided to just code as much for the assignment as possible for the mid-term submission. I replaced his broken boilerplate stuff with a working solution. I told the others in the group chat about it. Code works and builds, test coverage is high. Everything is fine.
The lazy kid replied to the group chat, that if I'd wanted to code and document(!) everything on my own, I should have told him in the first place. Also got that "fuck off" emoji in the message. So I restored his broken boilerplate stuff using git, even fixed the build errors and told him to explain to me what he tried to achieve, and that I'd be happy to include his code as soon as it worked. Didn't hear anything since. Commits neither.
I guess he was just looking for an excuse for not doing additional work in the project. -
Dijkstra 1988: "Unfathomed misunderstanding is further revealed by the term 'software maintenance', as a result of which many people continue to believe that programs —and even programming languages themselves— are subject to wear and tear. Your car needs maintenance too, doesn't it?"
npm 2018: "Naaaah!" -
Today, carrying my dinner to a table in our universities cafeteria, I passed by the table of a professor. He had a book on his table titled "Hacking Handbook". It contains chapters on httrack, ping, port scans and the like (I checked that on Amazon).
The professor drank a coffee, then got up to get some food. His table was directly next to the wall separating the food corner from the tables. He stayed away from his computer for two or three minutes. Both table and computer where totally out of his field of vision during that time. His computer was not locked and Outlook was open.
The professor teaches IT security.5 -
Got home exhausted the other day. Told my non-tech wife that I have a lot to do. She asked, if she could do anything for me I need. I said: "Well, I need a network aware LoggerComponent." She replied: "Is that something I could paint?" My facial expression let her burst out in laugher within one second.1
-
How come that asking politely on StackOverflow brings you hatred and contempt while hating on DevRant brings you empathy, understanding, consolation, encouragement and a friendly slap on the back?5
-
I once was sitting in a somewhat boring class on networks and computer architecture towards the end of the term. Nobody was really listening and the lecture was kind of a collection of random bits and pieces related to the subject matter.
So I tried out playing Duke Nukem on my rather weak laptop on DosBox. I was sitting quite in front of the class room, and the profesor could clearly hear my fan working like crazy. Later in his lecture he did a short excourse on cloud gaming, showing us nVidia's graphics card cloud where you could do remote gaming, the graphics being rendered remotely and streamed to your box over the interwebs.
I looked up from my game and said to the professor: "If I had this now, my fan would not be that loud." Even the professor laughed. -
I always wanted to try out `cd /; git init` for system recovery, but ironically always was afraid of ruining my system.5
-
Why the fuck is devrant constantly shitting a "free swag" pop up in my face? I don't got my 20 upvotes yet, so what's the point?4
-
!rant
Imagine your company would spend 100$ more per employee to rent a bigger, nicer office. Imagine how much additional space you'd have there. Maybe individual offices for everybody, or at least not more than two or three employees per office? Telephone booths for long calls, or a library to work in absolute silence, to do research, or to study something new there.
How would that affect your productivity and overall happiness? How much better you'd feel there? How much more relaxed would you be? How much less sick days would you have, and how much money would your company save resp. make more due to higher productivity?
Or would you rather have a salary raise of 100$?3 -
In an algorithm class, professor introduced us to some simple search algorithms (bubble sort, selection sort, insertion sort, shell sort). He did a quite decent job and most of the students were able to grasp the code and understand the differences in those algorithms. But then he spoiled his whole lecture with one additional slide. There he proposed an optimization: Instead of using a temporary swap variable, we just could use the first array element (or the zeroth element, respectively: the one ad index 0) for doing all the swapping. We just had to document that, so that the caller would "leave the first position of the array empty", resulting in "cleaner code". And he did that in the same class where he used Big-O notation to argue about runtime complexity. But having the caller to resize the array and to shift all the elements by one position did not matter to him at all, because it was "not part of the actual algorithm".2
-
In an IT management class, the professor wanted us to estimate the operation costs for a small IT company, breaking them down by service offered. I remember creating a markdown file, multiple times executing the line `echo $RANDOM >> estimations.md`. We rounded the numbers slightly, pimped the document a bit and submitted a nice PDF. When we had to present our work, the professor asked us how we had proceeded to calculate those results. We told him a story about an Excel file we worked on, but did not submit, because we thought he'd be interested in the end result and not care about those details. He asked us to submit that Excel calculation, because he wanted to comprehend our method. So we got together, created an Excel sheet, copied our "estimations" into column C and called it "service cost". For column B, we used the same "cost per man hour" value (scientifically estimated using the RAND() function) for every row. Finally, we divided the "service cost" by the "cost per man hour" for every row, put the result in column A and called it "effort (in man hours)". The professor, being able to "reproduce" our estimation, accepted our solution.2
-
I'm getting pretty tired of all those fuck faces calling themselves "evangelists" and are talking constantly and euphorically about "digitalisation" and "industry 4.0", as if their "skills" (using a smartphone to share kitten videos and making pointless PowerPoint slides using stock images showing some stupid motherfucker with VR goggles making weird gestures) would help them to rise to the pinnacle of "the future" (as conceived by them), while those stupid shit heads are exactly those we'll get rid of first as soon as somebody develops a bullshit generator AI for technobabble (with an export function to PowerPoint), putting those morons out of business for good.1
-
$ sudo pacman -S npm
$ npm install -g @angular/cli
$ ng new crap
$ du -h crap
366M crap/
me like: "WHAT THE ACTUAL FUCK!!!1"
$ rm -rf crap
$ npm uninstall -g @angular/cli
$ sudo pacman -Rs npm1 -
When a senior developer insists on using `Class.forName("foo.Bar")` instead of `new Bar()`, because she "saw it being used that way by her professor", but doesn't recall the context in which he did that, then you know what "Cargo Cult Programming" is all about.2
-
When you have to implement a search feature and could write down the SQL in half a minute, but instead you spend the whole afternoon figuring out how to do it with the ORM in place, and finally end up with 15 lines of poorly performing Java code instead of 3 lines of plain and simple SQL, then you really understand what the phrase "ORM is the Vietnam of Computer Science" means.
-
The moment everything works fine and you just type `npm update` out of boredom and suddenly everything breaks and you spend the rest of the day fixing it...1
-
I once had to implement a program to process CSV files. One line would be one order, so I wrote a class with a static factory method (Java) instead of an ordinary constructor, because I needed to throw exceptions if something with the line was wrong (which now and then was the case: invalid product IDs, missing fields and the like). After I committed my changes (CVS was still common in those days), a coworker (let's call him Max) asked me what the hell I was doing there. He expected me to replace the code (perfectly working, by the way) with either an ordinary constructor or by implementing "the factory pattern properly". His rationale: "We don't have those kinds of things in our code base!" So I let him argue a bit, not finding any well substantiated reason for me to "fix" the code. So Max wanted to team up with another developer in our office (let's call him Rick), explained the "issue" to him. I just sat there and enjoyed, knowing that Rick would not really care. But as soon as Rick understood what I did, he walked over to the book shelf, picked "Effective Java" from it, opened the book at chapter 1 and said to Max: "Look, Josh Bloch suggests doing it exactly that way for the problem at hand!" Max kept on arguing for a while, because his "rationale" (see above) was not affected by the fact that the code was actually good. It just didn't appear in our code base before.
-
The first company I worked for had a policy to not ship any release, service pack or hot fix as long as there were still open bugs with the severity "critical" or "blocker". They wanted to ship a service pack nonetheless, but without violating the rule and thus keeping their KPI unharmed. So the support guys got in touch with developers and asked them to lower the severity of certain "critical" bugs. They said we by all means need to write into the comments that the severity of those bugs has to be reset after the service pack was shipped, so that those important bugs would not be left behind.
- Support team violates the rules set up by themselves.
- Developers had the actual work of doing so (and the blame to catch).
- The Support team's KPI just remained unharmed.1