Why do I need to learn about software construction?
Knowing how to write code does not mean that you know how to create real-world software.
In real world projects, you will need to know how to manage your code, how to read the existing code, how to write code following standard styles, how to ensure that your code is working, how to automate your the process of building, testing and deploying your code, how to handle errors in your application, how to optimize your code for better speed, how to write secure code, how to avoid code duplication, how to create readable code, how to create code faster.
That’s why you need to learn about software construction.
What can I do after finishing learning software construction?
You will know how to create real world software with a team.
Hmm! Is it really useful?
If you doubt its usefulness then you can delay learning it until you are tasked to create a software system and you complete a half of it and are stuck there because when you add one more feature you will get tons of bugs due to the new code, or when you finish fixing 1 bug, you get 3 other bugs due to the code modification.
An other scenario is when it takes another person 2 weeks to read 1000 lines of the code that you wrote in order to fix a bug or to add a new feature because your code is unstructured.
Another scenario is when you are asked to improve some existing code for better performance or to refactor some code for clarity before adding a new feature but you do not know how to accomplish the task.
Alright! What should I do now?
Software construction requires a lot of reading. In order to get familiar with software construction you will need to read at least below books. Please read this Steve McConnell (2004). Code Complete. Microsoft Press book first.
Alternatively, you can read this Ben Collins-Sussman et al. (2011). Version Control with Subversion book.
After that please read this Paul M. Duvall et al. (2007). Continuous Integration Improving Software Quality and Reducing Risk. Addison-Wesley book.
After that please read this Robert C. Martin (2009). Clean Code: A Handbook of Agile Software Craftsmanship. Pearson Education book.
After that please read
– this Andy Hunt, Dave Thomas and Matt Hargett (2007). Pragmatic Unit Testing in C# with NUnit. Pragmatic Bookshelf book, and
– this Kent Beck (2002). Test Driven Development: By Example. Addison Wesley book.
After that please read
– this Martin Fowler et al. (1999). Refactoring Improving The Design Of Existing Code. Addison Wesley book, and
– its newer version Martin Fowler (2019). Refactoring. Improving the Design of Existing Code. 2nd Edition. Addison-Wesley Professional also.
After that please read this Elton Stoneman (2020). Learn Docker in a Month of Lunches. Manning Publications book.
If you have to work with legacy code then please read
– this Michael Feathers (2004). Working Effectively with Legacy Code. Prentice Hall PTR book, and
– this Diomidis Spinellis et al. (2003). Code Reading: The Open Source Perspective. Addison-Wesley Professional book.
After that if you are familar with .NET then please read
– this Matthew MacDonald and Bill Hamilton (2003). ADO.NET in a Nutshell. O’Reilly Media book to learn how to use a data provider to access data sources, and
– this Brian L. Gorman (2020). Practical Entity Framework. Apress book to learn how to use an ORM to access data sources, and
– this Suhas Chatekar (2015). Learning NHibernate 4. Packt Publishing book to learn how to use an ORM with mapping technique to access data sources, and
– this Brian Larson (2017). Microsoft SQL Server 2016 Reporting Services. McGraw-Hill Education book to learn how to use a reporting system, and
– this Justin Richer and Antonio Sanso (2017). OAuth 2 in Action. Manning Publications book to learn how to use authentication and authorization frameworks and libraries, and
– this Matt Perdeck (2010). ASP.NET Site Performance Secrets. Packt Publishing book to learn how to reduce a web application response time.
- Version Control.
- Coding Standards.
- Unit Tests.
- Continuous Integration.
- Legacy Code.
- Code Reading.
- Data Providers.
- Object/Relational Mapping (ORM).
- Reporting Services.
After finishing learning about software construction please click Topic 12 – Software Testing to continue.