Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are some advanced software development topics every developer should know? [closed]

People also ask

What are the things a software developer needs to know?

This includes a programming language like C++ or Java, essential computer science concepts like data structures, algorithms and computer networking basics, essential tools like Git, Microsoft Word and Excel, skills like SQL and UNIX, editors like Eclipse or Visual Studio, and text editors.


Concurrent/Parallel programming and multi-threading, especially with respect to memory models and memory coherency.. I think every programmer should be aware of the considerations in this arena as we move into a world of multi-core/multi-cpu hardware.

For this I would probably using Internet research most heavily; but an on-campus primer at a good university could be a good way to start off.


Security!

Far too many programmers just build something and think they can add security as an afterthought after finishing the "main" part of the program. You could always benefit from knowing more about how to secure your app, how to design software to be secure from the get-go, how to do intrusion detection, etc.

Advanced Database Development

Things like data warehousing (MDX, OLAP queries, star schemas, fact tables, etc), advanced performance tuning, advanced schema and query patterns, and the like are always useful.


Here are the three that I'm always finding myself explaining to junior developers who didn't get enough CS training. All that other stuff is generally more hype than substance, or can be fairly easily picked up. But if you don't know these three, you can do a great deal of damage:

  1. Algorithm analysis, including Big O Notation.
  2. The various levels of cohesion and coupling.
  3. Amdahl's Law, and how it pertains to optimizations.

Internationalization issues, especially since it sounds like it would not be an advanced topic. But it is.


Accessibility

It's ignored by so many organizations but the simple fact of the matter is that there are a huge number of people with low or no vision, color blindness, or other differences that can make navigating the web a very frustrating experience. If everybody had at least a little bit of training in it, we might get some web based UIs that are a little more inclusive.


Object oriented design patterns.


I guess "advanced" is different for everyone, but I'd suggest the following as being things that most decent developers (i.e. ones that don't need to be told about NP-completeness or design patterns) could gain from:

  • Multithreading techniques that go beyond "lock" and when to apply them.
  • In-depth training to learn and habitualize themselves with clever features in their toolchain (IDE/text editor, debugger, profiler, shell.)
  • Some cryptography theory and hands-on experience with different common flaws in security schemes that people create.
  • If they program against a database, learn the internals of their database and advanced query composition and tuning techniques.