My concerns about general programmers (especially for millennials and above)
Hi everyone!
May I take your time for 5 minutes? I’d like to share you the stories and concerns, generally about software development.
Back into 1st January 1970, when the UNIX-based computers started their time from 0. We’ve heard stories from those early people who developed software like Emailing System, Operating System and so on. They need to know the low-level knowledge of computers/machines that they are working on. And of course, no sites such as stackoverflow that able to help them.
Evolution of Languages
After decades, programming language become closer to human language thus become easier. People able to develop software without any knowledge on low-level layer anymore. Not forget to mention the programmer forums and communities that grow rapidly across the world, ready help anyone. And of course, exchanging code that “copy+paste” ready become common as well.
It’s also equipped by “ready to use” libraries and tools that developed to make our life (as SE) easier. Just include the libraries, install the tools, copy-paste the code from forums, stackoverflow and etc. And that’s it! You are ready to serve that apps
It will just run like that, able to be used by thousands of people without knowing what’s working in the deep inside of the system.
Tools are always being improved, meanwhile people are not
It’s sad truth that most of “Software Engineers / Professionals” nowadays are not able to explain about basic things related to it. Let’s start from basic things like:
- Compiling and Interpreting (and what’s the difference between them)
- Caching
- Forking vs Threading
- TCP/IP Stack, meaning of encapsulation
- Basic routing protocol (RIP, OSPF). Have you tried mininet before?
Lacking of knowledge, resulting ignorance and faults when it comes to diagnose the problem. The common example is, blaming the language, the orchestrator, virtualization technology etc. They are trying to fix this by switching those stacks, and problem still there. There it comes to frustration.
Let me tell you interesting stories that good for our “lesson learned”. Of course, I’m telling you my real story
Case 1: Heavy database query
I remember I was assigned to help a team on a web development project. There’s a problem, it is too long (took minutes) to open the website due to heavy SELECT query that being involved to provide the data. People starts to blame its configuration on database, the schema, the language or lacking resource of the server.
Then, I proposed another thing. That SELECT query will be cached on redis, with expiration time 5 minutes, there’s a small program to update the query and cache as well. The website is gonna use that redis to retrieve the data.
And guess what? With proper paging as well, after the changes, the website can be opened in 1 seconds!
If you clever enough to ask “then the data is not realtime updated!”, then yes you are right. However, there’s no such requirement from client to do so, therefore they accepted the behaviour.
Case 2: Misunderstanding about container
People come and just blame the container due to it keeps crashing. After careful examination, people just gave wrong information about the IP, the environment variable, the data is not correctly set, misbehaving from the app that causes memory overflow etc, thus make the container stops working.
But again, people’s tendency to unjustly blame something, is worsening the situation.
Conclusion
The point is, it’s good for you to know at least the basic level of this knowledge. I know it’s not directly related with those cases above. But, we will walk slowly towards it.
Thus, I’d like to create short series (Code: CNet-xx) on how to build basic network socket program with C. At the end of the series, we will talk about building our own web server using this language as well.
And also you will see that, your program may (or may not, we’ll see) more secure, simpler and faster compared to big existing web server that we have on internet.
Lastly, maybe you will be motivated enough to create your own network infrastructure service layer by yourself. The good thing is, you know what you are doing, you know how to fix it directly on its source code without having workarounds like what we’ve been doing if we use others’ software. Also, you are able to customize its behaviour as much as you want.
From security perspective, public exploit/tools (that widely used by script kiddies, that I believe most of “professional hackers” on this level) will definitely not be working on your system.
.
.
Interested? ARE YOU ready to move forward? Yalla start from here -> https://medium.com/@habibiefaried/cnet-01-basic-c-socket-programming-a818b0da5ae0
Anyway, here is repo that will be used: https://github.com/habibiefaried/sysprousingc
Good luck!