As a freelancer or agency – how do you deal with spaghetti code projects?

taking such spaghetti projects is profitable. Adding to spaghetti is not too hard. The customers are asking for it – hence its not unethical. These customers have already proven they don’t care about the internals. And then spaghetti also has patterns within – making it easier to understand as we spend more time with it.

Second, these projects are extremely frustrating. We know what’s wrong, but voluntarily decided to live with the wrongdoings of other developer(s). Of course we get paid well.

The Biggest Difference Between Coding Today and When I Started in the 80’s

the biggest skill back then was invention, creativity, imagination, whatever you would like to call it; unlike today there was no Google, no Stackoverflow, no open source at your fingertips, rarely even someone to email to ask for help. You were basically programming on an island, and anything you needed to figure out or solve, you had to do it yourself. Sometimes you might go to a library and search books and journals, or maybe you could ask someone at a user group or conference, or if you were lucky someone you knew was a programmer. Generally though no matter what you wanted to do it was on your shoulders to come up with it. Even if someone else in the world was solving some similar problem, you probably had no way to know about it.

What you need today is searching, understanding and evaluation. You have access to the world’s smartest (and sometimes dumbest) people. The chances that something you need hasn’t been done elsewhere is rare and the real skill is in finding it, relating it to what you need, deciding if it is useful or adaptable, and if it is of a decent quality.

.. That is a very different skill set than the 80’s programmer—working with little information, having to imagine how to fix it or invent it or solve it in some way. Back then of course there were a lot fewer programmers (guessing maybe 1% or 0.1% of today) and unless you were good at figuring things out for yourself, you really couldn’t be a programmer outside of some very large employer. Today it seems much more likely that someone without much imagination can still become a decent contributor, you can learn online, you can build things on top of open source, you can read what other people think and follow along. It’s not that programmers back then were smarter than today, just that it was the skills needed were different.

The growing trend toward compiled languages

Go was designed by a team in Google that included Dennis Richie and Ken Thompson, who were the original designers of C. They created a programming language which is based on parallelism and safety. Go is simpler in syntax than C/C++ and employs automatic garbage collection like Java, but with better performance. The language isn’t low-level enough for operating systems and device drivers, but it is finding a large number of uses, including running Google Web Services.

.. Swift is designed to replace Apple’s Objective-C. Unlike Go, it incorporates more of the features from higher-level languages. It also has automatic freeing of memory, but it uses resource counters to determine when to free the memory, rather than a garbage collector which imposes a performance penalty.

.. The most interesting of these new languages in my opinion is Rust, which was designed by the Mozilla Foundation in order to develop a new web browser engine based on safety and parallelism. Instead of a garbage collector or resource counter, Rust uses a novel concept of ownership to determine when to free memory. Only one variable at a time can own a piece of memory, so memory is automatically freed once its variable goes out of scope

.. Rust strives to give the programmer all the control of C/C++, but with greater safety and many features of high level languages such as closures, pattern matching, generics, loops with automatic iterators, and traits without the overhead of classes and inheritance. The Rust designers describe these features as “zero-cost abstraction,” meaning that they want to give programmers features from high-level languages, but without the performance cost of that abstraction.

.. Whereas Go and Swift are easier to learn and the syntax is simpler than C/C++, Rust has a very complex syntax and is much harder to learn in my opinion. Writing code in Rust forces the programmer to do a lot more mental work from the outset and type more code to do the same thing as Go or Swift.

.. Despite its steep learning curve and complex syntax, Rust is rated by Stack Overflow’s 2016 Developer Survey as the programming language with the highest percentage of users who want to continue using it. The language with the second highest percentage is Swift and Go is the fifth highest.

.. The rise of Go, Swift and Rust is a sign of the growing recognition that Moore’s Law is sputtering out and we will need to live in a world of limited resources. We don’t have the luxury of solving all problems by simply throwing more hardware and costly layers of abstraction at it. Instead, we need leaner code that consumes as little memory and processing cycles as possible, while still providing safety and concurrency.