What are some new software development topics that every developer should know?

Let's say your company has provided you time and money to get training on so many advanced programs that you can eat in a year, using carte blanche. What would these topics be and how would you like to acquire them?

Assumptions:

  • You still have the results to create, but you are allowed to use one week per month for one year for this training.
  • Training can come from anywhere. IE: classroom, on-site instructor, books, subscriptions, podcasts, etc.
  • The theme can cover any platform, technology, language, DBMS, toolkit, etc.
+43
language-agnostic
Jun 01. '09 at 18:00
source share
32 answers
  • one
  • 2

Parallel / parallel programming and multithreading, especially with regard to memory models and memory consistency. I think every programmer should be aware of considerations in this arena when we move into the world of multi-core / multi-channel processors hardware.

For this, I will most likely use Internet research; but a campus course at a good university might be a good way to get started.

+44
Jun 01 '09 at 18:03
source share

Security

Too many programmers simply create something and think that after completing the "main" part of the program, they can add security as an afterthought. You can always learn more about how to protect your application, how to develop security software from the very beginning, how to make intrusion detection, etc.

Advanced Database Development

Things like data storage (MDX, OLAP queries, star schemas, fact tables, etc.), advanced performance tuning, advanced query patterns and patterns, etc. always helpful.

+38
Jun 01 '09 at 18:11
source share

Here are three that I always find for myself as an explanation for junior developers who have not received enough CS training. All that other things are usually more hype than substance, or they can be easily collected. But if you do not know these three, you can do a lot of damage:

+20
Jun 01 '09 at 18:04
source share

Internationalization issues, especially since it seems that this would not be an advanced topic. But it is so.

+20
Jun 01 '09 at 18:35
source share

Availability

It is ignored by many organizations, but the simple fact is that there are so many people with low or no vision, color blindness, or other differences that can make browsing the Internet a very unpleasant experience. If everyone had at least a little training, we could get some Internet-based user interfaces that would be a little more meaningful.

+17
Jun 01 '09 at 19:31
source share

Object oriented design patterns.

+14
Jun 01 '09 at 18:04
source share

I think the “advanced” one is different for everyone, but I suggest the following, as what the most acceptable developers (that is, those who should not be told about NP completeness or design patterns) could get from:

  • Multithreaded methods that go beyond “blocking” and when to apply them.
  • In-depth training for learning and getting used to smart functions in their toolchain (IDE / text editor, debugger, profiler, shell.)
  • Some theory of cryptography and practical experience with various common flaws in the security schemes that people create.
  • If they work with a database, they study the internal database of their database and the composition of queries and tuning methods.
+14
Jun 01 '09 at 18:11
source share

Developers need to know the basics of SQL development and how their decisions affect database performance. It is one thing to write a request, another thing is to write a request, understand the plan of explanations and make design decisions based on this conclusion. I think a good course on PL / SQL development and database performance will be very helpful.

+11
Jun 01 '09 at 18:09
source share

Unfortunately, communication skills seem to fall under the “advanced topics” section for most developers (of course, the company is excluded). The best way to acquire this skill is practice.

  • Take your headphones and talk to someone instead of IM'ing or emailing the guy at the next table.
  • Pick up the phone and talk to the client instead of lobbying the email over the fence.
  • Ask questions at the conference instead of sitting at a laptop screen twitter.
  • Actively participate in a non-technical meeting at work.
  • Present something in public.

Most projects do not crash for technical reasons. They fail because they cannot create a team. Communication is vital to team dynamics.

It will not hurt your career.

+10
Jun 01 '09 at 19:35
source share

One of the best courses I took was a technical writing course. It served me well in my career.

Extras: this probably doesn't matter. What is the topic - the fact that the organization is interested in and pays for it, and the developers want to go and go - this is a better indicator of success / improvement than any particular topic.

I also don’t think it matters, what is the topic. Dev organizations do so many things during a project that learning and then doing / trial and error will always have a better perspective - even if trying to try / use new material fails. This experience is likely to help more in future projects.

+8
Jun 01 '09 at 18:15
source share

I am a man of books, so I would not bother with instructions.

Not necessarily in that order and depending on what you already know

  • OO Programming
  • Functional programming
  • Data Structures and Algorithms
  • Parallel processing
  • Installed logic (essentially sql theory and how to apply it).
  • Creating parsers (I only set this because it really appeared where I work)
  • Software development method
+7
Jun 01 '09 at 18:14
source share

NP Completyness . In particular, how to determine if the problem is NP-Complete, and how to build an approximate solution to the problem.

I consider this important because you do not want the developer to try to solve the NP-complete problem by getting the optimal solution if the problem search space is very small, in which case brute force is acceptable. However, as the search space increases, the time required to solve the problem increases exponentially.

+6
Jun 01 '09 at 18:06
source share

I would highlight new technologies and trends. Some of the new technologies that I am learning / improving my skills include:

  • Microsoft .NET Framework v3.0 / v3.5 / v4.0
  • Cloud computing environments (Amazon EC2, Windows Azure Services, GoGrid, etc.)
  • Design Patterns
+6
Jun 01 '09 at 18:46
source share

I’m from the world of MS-based developers, so here’s my lesson on this

  • Learn more about new concepts in Cloud Computing (various APIs, etc.). how the industry relies on him for a while.

  • Learn more about LinQ for .net framework

  • Distributed databases

+4
Jun 01 '09 at 18:03
source share

Refactoring methods (which also involves learning to write a good set of functional and functional tests).

Knowing how refactoring is the best way to keep code clean is rare when you do it right the first time (especially in new projects).

However, several refactoring requires a decent set of tests to verify that refactoring has not added unexpected behavior.

+4
Jun 01 '09 at 20:32
source share

Parallel computing is the easiest and best way to learn it.

+3
Jun 01 '09 at 18:04
source share

Debugging

Debugging David J. Agans is a good book on this topic. Debugging can be very difficult when you are dealing with multithreaded programs, crashes, algorithms that do not work. etc. It would be better for everyone to debug well.

+3
Jun 01 '09 at 18:13
source share

I would vote for real battle stories. Let developers from other organizations present their successes and failures. Do not limit the possibilities of presentations to the technologies that you use. With a significantly complex project, this is due to cutting-edge topics that you did not even consider. Success in the real world (and failure) has much to learn.

+2
Jun 01 '09 at 18:26
source share

Go to hyphens

and ACCU conferences




Read

  • Agile Software Development, Principles, Patterns and Practices (Robert C. Martin).
  • Clean Code (Robert C. Martin)
  • Pragmatic Programmer (Andrew Hunt & David Thomas)
+2
Jun 01 '09 at 19:24
source share

Well, if you're here, I hope you now have the basics:

  • OOP best practices.
  • Design Patterns
  • Application security
  • Security / Inquiries / Security Schemes

First of all, developers should strive to learn several programming languages ​​and disciplines, so that their skill set expands in more than one direction. They do not need to become experts in these other skills, but at least they have a very keen understanding of integration with their central discipline. This ultimately makes them much more advanced developers, and also allows them to use all the tools at their disposal to create applications that can exceed the limitations of a singular language.

In addition to specific programming topics, you must also learn how to work in Agile, XP, or other team methodologies in order to be more successful while working in a team environment.

+2
Jun 01 '09 at 19:43
source share

I think an advanced programmer should know how to get your employer to give you time and money in order to get training on so many advanced programming topics that you can eat in a year. I have not advanced yet. :)

+2
Jun 01 '09 at 20:29
source share

I would suggest an artificial intelligence class at a college / university. Most of the material is fun, easy to understand (at least the basics), and problem solving is usually creative.

+2
Jun 01 '09 at 21:29
source share

The Hitchhiker's Guide to the Galaxy.

+2
Jun 02 '09 at 14:37
source share

How would I prefer to get training? I would like to have a significant amount of time devoted to self-study.

+1
Jun 01 '09 at 18:15
source share

I totally agree with Accessabiitly. I was asked to look into it for work on the website, and there is a real lack of good knowledge on this issue, and not just the lack of CSS standards to help with such movie adaptors.

However, my answer goes to GUI design - it's a pretty complicated thing to get right. There are too many terrible applications that can be prevented by simply taking the time to follow the advice / projects of HCI (Human Computer Interaction). Take Google / Apple for inspiration in creating the GUI - not your typical hundreds of button / shortcut combinations that are crowded out too often.

+1
Jun 01 '09 at 19:37
source share
  • Automated testing: unit testing, functional integration testing, non-functional testing
  • Compiler details (more relevant on some platforms than others): How does the compiler implement some common constructs in X? On an interpreted bytecode platform, how does JIT compilation work? What can be JIT compiled (for example, can JIT virtual calls be compiled?)?
  • Basic web security
  • General design idioms from other areas of concern than the one you are currently working on.
+1
Jun 01 '09 at 21:34
source share

I would advise you to learn about Refactoring, Test Driven Development, and the various unit testing modules (NUnit, Visual Test, CppUnit, etc.). I also learned how to incorporate automatic unit testing into your continuous integration builds.

Ultimately, if you can prove that your code does what it claims to do, you don’t have to be there to answer questions about why and how. If an maintainer comes in and tries to “fix” your code, they will know right away if they break it. Tests written around requirements (use cases) explain to the maintainer that your users wanted to do this, and give a small working example of how to call it. Think of unit tests as functional documentation.

Test Driven Development (TDD) is a newer development approach that starts with requirements when you start by writing a test before writing code. Then you write enough code to complete the test. You must stop before writing additional code (which you will never need), because you will reorganize it later if you find that you really need it.

What makes TDD cool is that a poor interface (like one with a lot of dependencies) is also very difficult to write tests. It is so complex that the encoder rather reorganized the interface to make it easier to test. And this refactoring simplifies the code, removes inappropriate dependencies or groups related tests together to facilitate testing, thereby improving cohesion. Having done this immediately to the developer, when he writes a poorly interacting module, the developer adheres to the architecture and gravitates to the principles of tight cohesion and free communication. Good interfaces are a natural result. And as a bonus, once you pass all your tests, you know that everything is ready.

+1
Jun 02 '09 at 22:18
source share

At first glance this seems like a simple answer, just enter your favorite pet about what other developers cannot do right. But when I read the answers and thought, I realized that every "advanced topic" was covered in my undergraduate curriculum - 20 years ago. And I doubt that the concepts of OO, security, functional programming, etc., changed at that time. Of course, there are tools, but I argue that the tools are different from those.

So what is an "advanced topic" in computer science? Who is Turing, Whip, 21st Century Tedon?

I do not have a clear answer to this question, although I would like to see more work on theories of parallel programming that will allow tools to abstract this messy material for developers.

+1
Jun 03 '09 at 21:10
source share

Funnily enough, no one mentioned:

  • debugging.
  • tools and ideas you work with
  • and the platform for which you are developing.

Everyday development is much more fun if you know your tools well and you do more and make your life easier if you know how easy it is to debug elses user code.

+1
Jun 05 '09 at 16:28
source share

Source control

+1
Jun 05 '09 at 18:33
source share
  • one
  • 2



All Articles