How to know what a star developer should learn?
Now that we already know how to master developing, why do not moving forward and become in the best of all? Have in mind there are so much increasing demand and competition in this field out there. In this article, we will continue on that path and will know how to know what a star developer should learn, because we know that being a great developer is far beyond that just coding.
What a star developer should learn?
Yes, we have to already know basic fundamentals and concepts like data structures and some programming language and at least master one of them. But following we will be introducing other things that we can learn and improve to stay ahead of competition.
Advanced data structures and algorithms
Once we had learning data structures and algorithms fundamentals, it is important give a step forward by studying optimization and parallelism to make the right choice between algorithms, data structures and calculation costs in order to achieved significant improvements in any program. The ability to know which data structure is better for an algorithm to solve a specific problem is the topmost priority skill in a good software developer.
A developer who is proficient in version control concepts, well-using and team collaboration best practices is a keeper in any software factory. Today is necessary we will be comfortable with Git preferable and have a GitHub portfolio would be great, at least another source control knowledge like SVN.
Database and SQL
Database and SQL fundamentals is a must have knowledge for all good people that called themselves developers. So, if we want to highlight in this field we have to reinforce more about database analysis, query planning, security, access and storing optimization.
As developers we should have at least full domain of one Integrated Development Environment (IDE). There are many choices of them with multiple purposes and programming languages to work on. Modern IDEs are most important tool for every developer because increases their productivity by taking away the worry of syntax and well form among other things.
A star developer is responsible to execute as many test cases as possible before saying their code is done. By testing we can find all bugs our code can have, the less our code is rejected by QA the better programmers we are. There are a plenty of testing methods and frameworks we can use where most important are Unit Testing, Integration Testing and System Testing.
If we can develop platform independent software by taking all considerations about we will be ensuring all growing opportunities. There are many languages and frameworks that allows us to write code once and executing it across different platforms well be web, mobile, desktop or server-side whatever OS use like Linux, Windows, Mac, etc.
In the interconnected world where we are living, most development systems are based on client-server model, that is implied full network communication is required. Network basic understanding is topmost knowledge a developer should have today in order to generate efficient code; such how each communication protocol work like HTTP, TCP, UDP, what are the difference between LAN or WAN, and so on.
Nowadays has proliferated use of containers where we can rapidly deploy our applications with all of its dependencies and also can take advantage of process isolation. They are useful to migrate any development from one platform to another, for example if we want to move a program from a server to a public cloud its code may not works well in its new environment, with containers we do not have this worries. It is another key to have in mind as a star developer.
Cloud is another new technology that we have to understand a little more if we want to be a top list developer. We can choose one of the existent platforms and get familiar with cloud concepts. Most companies are migrating their environments to the Cloud looking for scalability and cost-savings, so there is time as a programmer to take that walk.
What more we have to learn to become a star developer?
In more advanced topics, to become a super star developer we can learn further more about these subjects:
Data storage and memory access
The general rule as far as storage is concerned we have to know that writing is very expensive, meanwhile reading is cheap; write is 40 times more than read. In a few words, data storing is a transactional operation this require write disk access which results in disk seeks and multiply this effort based on size and shape of data; while reading do not need to be transactional, data is cached from disk once and all subsequent reads come straight from memory that is much quick.
Knowing some numbers
We will introduce a list generated by Dr. Jeff Dean that every developer should know in order to have a good sense of how long some operations will take if we are looking for efficiency:
- L1 cache reference takes 0.5 ns
- Branch bad predict takes 5 ns
- L2 cache reference takes 7 ns
- Mutex lock/unlock takes 100 ns
- Main memory reference takes 100 ns
- Compress 1K bytes takes 10,000 ns
- Send 2K bytes over network 1 Gbpstakes 20,000 ns
- Read 1 MB sequentially from memory takes 250,000 ns
- Round trip within same datacenter takes 500,000 ns
- Disk seek takes 10,000,000 ns
- Read 1 MB sequentially from network takes 10,000,000 ns
- Read 1 MB sequentially from disk takes 30,000,000 ns
- Send packet from CA to Netherlands and back CA takes 150,000,000 ns
More about latency will help to interpreting profiling results:
- Screen display approximately takes 70ms (on a common LCD between 3 and 4 display frames)
- CPU Cycle is about one time-unit (anything computer does work on CPU cycles)
- CPU Cache Hit is about 10 time-units.
- Memory Access is about 100 time units.
- Disk Access is about 1,000,000 time units.
- Network Access is about 100,000,000 time units.
Optimization and parallelism
Almost everything can be optimized, but is not happen the same with parallelism. The way of we have to design our programs depends on its requirements and needs. By knowing our services performance and numbers mentioned above we can code looking program efficiency. A main thing to know about parallel and distributed systems is that global data shared is expensive, but it gains respond time. So we have to decide when it worth killing performance by lock contention of sharing.
When we are optimizing systems we have to consider components location although using compression even encryption/cryptography algorithms will help by saving network bandwidth; memory is faster than disk access and write is more expensive than read, so we have to look for low write contention; against more use of resources, is a good thing to consider as parallel as we can and architecting for scaling writes.
In conclusion, in order to know what a star developer should learn we must research a little further about those subjects that we have introduce above, and to take in consideration every one of those things when designing our software; by knowing this it would be a tremendous difference when looking for efficiency and effectiveness in our code. Although it is not good enough to just know the generic performance but also how its subsystems perform.