Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resources to build software engineering skills [closed]

Tags:

architecture

Apologies if this question is too open-ended for the site, but it just seemed the best place to ask it.

I am a self-taught programmer with little maths in his educational background and who has, through the course of a ten-year career moved slowly from front-end web scripting and web development to middle and data-tier software engineering. As a result there are areas of my knowledge and experience that are somewhat lacking.

After a recent review with my manager, it was indicated to me that overcoming these gaps was all that was standing between me and a promotion to a senior engineer role. However in order to get that, I was going to have to find for myself a structured approach to learning and demonstrate that I'd taken on board what I needed to know.

Personally I'd identify my areas of weakness as follows. Be aware that the problem in a lot of cases is not that I don't understand, technically, how these things work but that I don't see where it is or is not appropriate to apply them. For example I know what an Interface is and, technically, what it does, but I have a hard time differentiating when it's appropriate to use an Interface over, say, a group of related OO classes which inherit from a base class. So it's kind of more ignorance of good software design than it is technical ignorance - I do have trouble appreciating, digesting and working on things like loosely coupled systems.

  • Interfaces
  • Delegates
  • Design Patterns
  • Network architecture & protocols

Also I've never done some of the low-level stuff like compilers and suchlike. I wonder sometimes if it'd make a big difference to my ability to write code which is not only effective but well optimised if I had a better knowledge of this sort of material.

Sometimes the worry that I can't identify weaknesses in my skill set because I don't know how to ask the right questions knaws away at me. So, in the hope that I've framed the question properly, I'd like your suggestions on:

  • From the sound of what I'm currently lacking are there any other topics I should think about looking at?
  • Where are some good resources for learning this material?
  • Are there any structured, self-taught courses I can work through that are relevant? I don't, sadly, have time to take a formal qualification.

Cheers, Matt

like image 865
Bob Tway Avatar asked Jan 20 '12 15:01

Bob Tway


1 Answers

I was a self taught coder not so long ago so I can relate to your position. Since then I've shipped 10 Millions LOC applications, so I had to develop discernment. 3 things helps me to get software engineering : books, code and people.

First of all, good engineering is about beauty, the beauty of an elegant design, of an efficient mecanism. You need to develop that sense for beauty and to do that you need to see it and discuss it.

Books like SICP, Refactoring, Head First Design Patterns and Beautiful Code are all about beautiful/better code. Most of the time they are not about a language per se (or about exotic languages). Code complete is also interesting but somehow more low level.

Online reading of code is also a good way to educate your taste. I have no example in mind but this is a common question, you should easily find some ideas. Also, building an ambitious application (a game, 3d modeler, web server, database) is a good practive : you're likely to redo it 2 or 3 times to have a better architecture.

People is also very important. If you find a/a few passionate software architect(s) to discuss with, you will be able to confront your view on what is beauty. I am still digesting some discussion I had with my manager a few years ago.

This "enlighment" is an ongoing process, so don't get discouraged and just move forward. One day, you'll see ugly code with an obvious alternative implementation, one you could discuss and compare objectively as better than the original.

like image 89
LBarret Avatar answered Oct 15 '22 10:10

LBarret