Many people seem to think that developers need a lot of guidance, yet I’ve never seen someone proving that point.
What would happen if the team was unmanaged?
Let them do what they think is right to fulfill the businesses tasks.
I doubt they’d only build things no one needs…
Companies do not have missions.
They are mandated to earn money - a simple and clear goal.
Everything else companies proclaim is what I like to call: social substitution currency.
These are used to motivate employees to put more effort in their work than is required by terms of their contracts, and is also used as a marketing tool.
Now a full remote worker is much less influenced by peer pressure and thereby the substitution currency won’t work effectively.
That’s one reason why CEOs want them back at the office
Scrum is advertised massively. There is certifications and consultancies all around the globe making money out of it.
Marketing works, especially on people with a CXX title…
Kanban is simple. So simple that no one could justify taking large amounts of money to teach people how to use a list of tasks.
It’s not harder, it’s more tedious.
We’re currently developing a somewhat sophisticated AI/Image Analysis system with OpenCV.
While the backend is pretty straightforward it’s still not easy - reading papers about different AI models and implementing them is hard, but the path is clear to see so to say.
The client app is using React and already has 3 times the lines of code compared to the backend (which is C++).
Frontend has more moving parts that need to be integrated properly.
We evaluated other tech for the client, like Qt or even ImGui on OpenGL, but the effort for the client would still be much higher than for the AI services.
The only time I experienced a nice, less funky workflow doing frontend, was Delphi 6 and VCL
Back in 2013 we built a software with xulrunner and extensive usage of XSL/T.
It allowed us to create an absurdly complex UI with precise rendering.
No CSS.
Despite the lack of animations -that we have in CSS - it was superior for custom UIs.
Today you could argue, that we need to be specific about closing tags properly again when using something like JSX so it gets cough compiled.
XSL/T is tedious to work with, but it’s also strict and easier to debug than to push pixels with CSS.
Honestly, I don’t know why we left that path, but I feel dropping XHTML may not have been a decision made by software engineers…
My first experience with postgres was around 2009. Picked it out of curiosity and it ended up at the clients server doing it’s job and never bothered anyone.
I thought it was very cool doing fancy joins and reliable procedures but then came the NoSQL era and I nearly forgot about it.
Then everyone started to realize that any growing database ends up with complicated relations and lots of applications do not fit non-relational data structures well.
Suddenly postgres came up with the json and jsonb types. It was like a fairytale.
So when did it became cool? Around 2016/2017. Why? Good technical decisions and execution.
AI is currently massively over-hyped in both directions.
Either people fear to be replaced completely by AI or to become super humans by merging with them.
ChatGPT is a nice tool, and I use it for my work nearly every day.
However, it’s a tool. Nothing much fancy about it, tbh.
As a senior developer I trained juniors all the time during different projects successfully.
I don’t think bootcamps and workshops help much as the provided knowledge is not immediately used in real-world work.
Instead I delegated parts of my work directly to the juniors. Small bits at first. Then giving them detailed reviews.
Harder tasks are done in pair programming, let the junior be the driver.
Never suggest direct solutions! Let them find solutions themselves so they gain trust in their own abilities. Show them how to go deep into existing code and library code - teach them how to learn so to say.
It’s crucial to let them work on real stuff. Work with them together and become a team - even better - a team you can form yourself.
Also motivation is a factor. So you have to get to know them personally well. Not everyone is made to be a programmer. Some are more interested in business and management - but still can become valuable and competent developers.
One aspect of the article, if I understood correctly, is that with abstraction comes uncertainty about the compilation result.
If you need to be 100% sure about what the compiler will produce you shouldn’t go with a higher level language like C++ and stick with C.
"Orthodox C++" looks like an euphemism and the examples are just taking the ++ out.
I use the language for over 20 years now and I've always been quite happy with the new features provided, especially smart pointers and ownership concepts.
So what exactly is the point?
STL is complex? Yes - keep learning and mastering.
C++ compilers produce unexpected results? Tell me you are a master of x86-assembly and know the performance costs of every kernel function your application uses via the compilers abstractions…
Every database I’ve seen so far grows into a state that makes relations necessary.
Earlier or later those become more and more atomic and then systems like MongoDB will make you suffer.
Redis is awesome for caching and cache-like situations.
Just start with Postgres, or any other SQL DB that offers proper types for denormalized data like JSON.
Why is everyone shying away from SQL anyway?
Marketing.
There are plenty of alternatives for ERP and project management but non of them are so aggressively marketed.
In germany most big business run SAP. Why? Is SAP technically better than anything else? No, but their sales people play golf with the relevant CEOs and CTOs.
Developers are rarely or never asked which business tools to buy although we’re the only ones who could possibly evaluate them with some competence.
"No one gets fired for buying IBM" - today you could replace it with SAP, Salesforce or even Jira.
Btw, the same is true for web frameworks and even some programming languages.
While there are lots of fear-driven opponents here in germany, we also know our math - and you can be sure if there was a huge ecological and economical benefit from nuclear power we would build reactors like crazy.
But it turns out that it’s not cheap enough and building and maintaining those plants doesn’t save much greenhouse gases.
If we built them en masse many years ago the numbers could be better maybe. Anyway renewables are our way to go and until we get there we keep the coal so we don’t end up in the middle ages.
Your question seems a bit too generalized imho.
It’s a bit like asking for resources about building a fast vehicle, without specifying what kind of…a fast car is certainly much differently built than a fast ship or plane.
I assume you want to make a high-performance web-server. Now performance can mean different things: do you need to serve lots of parallel requests, or do you need to shovel large amounts of data, or you need fast complex calculations? Or all of it?
Every type of "performance" is a separate problem and by solving and integrating them you could achieve a "high-performance" server.
However, performance per se is not a reason to start a project. It is sometimes a necessity (e.g. financial transactions, game servers, page load times, etc.) for the desired quality of a service and its business requirements.
Writing efficient and effective code is the way to reach good speed. In C++ for example it’s often wise to use vector.reserve and plan ahead your memory need. Using static and const where appropriate and enable the compiler to generate best results. There may be similar approaches for Java, too…
Anyway performance is achieved by efficient code and well-designed architecture. That’s why you may not find much resources about such a broad topic.
And oh, don’t write a web server from scratch in C++ - at least wait for C++-20 to be adopted everywhere
Full-Stack doesn’t indicate competence.
A good developer will write good software. When the task is building a nice GUI, he will. When it’s building a performant datalayer he will also.
Refusing to work on stuff outside ones comfort zone may indicate mediocrity.
Personally I always do what has the most positive impact for my team and my clients.
In the end frontend and backend is still just software - input-processing-output.
The technical details can be learned quickly. The proper mindset to learn effectively may not be acquired so easily tho…
The choice of language is never irrelevant. Especially if you are launching a start up. You are about to build the foundation of your future development architecture.
For example C++ is a great choice for heavy data processing and number crunching, but horrible when aggregating multiple web services or building HTML. PHP is like the opposite and Java is a poor choice for either (imho).
Also you will need more developers later on who fit into your working culture. Good C++ devs are likely slightly older than your average NodeJS-Hacker and they care about family and such non-work-related stuff.
Haskell guys would probably stay for some late hours to discuss wether their new typeclass is just satisfying a semigroup or fulfills all monad laws…
My advice: choose a well adapted language from the field of industry you aim for: general web/e-commerce - NodeJS/TypeScript, automotive/industry/embedded - C++, finance - .Net/C#/F#, Science: Python
Most C++-projects I dealt with are neither clean nor performant. I rather follow clean code to improve maintainability and get things done than to optimize for performance.
It’s also easier to find bottlenecks in a well readable and testable code base than in a premature-optimized one.
However it is true that the more abstractions and indirections used software gets slower.
Also these examples are too basic to make a real-world suggestion: never assume sonething is slow in a large project because of indirection or something…always get a profiler involved and run tests with time requirements to identify and fix slow running parts of a program.
The same as in times of a booming economy:
Sharpen your tools, learn new and old stuff, revisit the basics.
Work on your social skills and networking. Maintain or improve your physical and mental health.
Recessions are turbulent, sometimes chaotic. Companies fall, others raise.
Hypes die faster, as everyone turns to businesses that offer real value…
Just an idea: how about a programming language framework that defines a basic formal grammar where the keywords can be customized? I could imagine it might help people getting into programming all over the world.
There is no project where you find perfect architecture combined with clean and fully tested code that reads like a poem.
You must master the chaos. Entropy is inevitable and yesterday’s genius design is tomorrows legacy junk haunting developers with massive constraints and bugs.
From a purely technical perspective, every software should be entirely rewritten when development hits architectural limits and boundaries. And this happens during early development already. But in the real world you have to earn money, people leave taking their domain and specific project knowledge with them, and management doesn’t have a clue about how computers work, yet they pay your salary.
Professional software development is not about perfect code - but code that finally earns you alot of bucks. It’s about applications that people need and use.
The most important indicator for professional software is that is solves the initial problem.
Code quality, architecture and user experience come after that.
Can you remind me on that conspiracy theory? Is it something like: we the middle class process that tasteless goo into something you - the poor - can eat, so we can get some money from the upperclass who still eat their wagyo beef?
There are no tools that improve your skills. To become a better developer you have to apply new ideas and concepts on real projects. Try new programming languages (I assume you use .Net so why not write some tests for your current project using F#). Implement decoupling strategies like Message bus or Events, etc. Learn about other fields of software like parsers and compilers, AI, hardware, and so on. Learn from the old masters: Martin Fowler, Rober C. Martin, Alan Kay, Alan Turin, Niklaus Wirth…
It’s also very important to apply new concepts in real projects that give you immediate feedback to fully understand them.
A large amount of modern is software is bloated. Most websites are filled with dozens of tracking an marketing (anti-) features, Drm in games, ORMs and query-languages that require another parsing and resolving layer in backends, let alone network latency, and so on…
Software today does much more than in the past, yet most of what it does is worthless for the user.
Let me just give a few opinions.
First, social media is bad for mental health in general. From a business view it’s a marketing tool - use it as such and don’t follow anyone - why waste time reading stuff there anyway? As a founder you must run a business. A business is meant for earning money, not for fulfilling a dream.
All the shiny posts about how successful a startup is, is just marketing. Smoke and whistles. It should attract the reader into buying the product or service. Your failure and bad feelings are you not realizing you still have a consumers mindset not that of a business man.
Also there are endless business ideas and as such an idea has zero value. Execution is what adds value. Ideas themselves are worthless.
As soon as you understand that a business is just about money, and you accept that cold reality of capitalism, the sooner you will find ways to success.
Luck plays a role, too. But you need to be in places around people where opportunities are plenty. Successful businesses are built around successful people and their networks! Not social media networks!
Why estimating work in development always fails? Because I can only estimate things I have done before within a context that I know. The nature of software is the unknown, therefore any estimation will be unreliable.
Using story points is the compromise the industry went for to account for that. Going back to time based isn’t helping anyone. Imagine being a navigator on the ship of Columbus - you only know the direction heading for but neither the goal nor the circumstances (riffs, streams, weather) ahead. And then the captain asks how long it takes to sail around a storm…
Microservices are a solution for scalability problems. They can have benefits in terms of maintainability by separation of concerns - but the decision in favor or against should be based on technical decisions, not on how advanced or big your company is. Also why are people only discussing monolith vs microservices? That’s two extremes in a world of uncountable options. Why not 2 or 3 services instead of dozens of tiny ones?
Modern C++ is just fine. It is a more flexible language than Java and the rising demand of embedded software for advanced microcontrollers allows complex C++ instead of no-malloc-for-safety-reasons - style C. So I find the current trend not too surprising.
Also I dont know many languages that offer that much versatility. Only Rust maybe…when the ecosystem matures…