JavaScript Node.js Basics Building a Command Line Application Planning Our Project

Matthew Leroe
Matthew Leroe
10,193 Points

Are there any articles or books that expound on Chalkley's 4P's and workflow?

A mentor told me that "you do not know how to code unless you know what you are coding." That led me to study language independent problem solving. I'm still working on it. Are there any resources that might help me better Prepare, Plan, Perform, and Perfect my programs? For the moment, I simply get lost often, and end up in that abyss Douglas Crockford has mentioned.

I'm looking for a better way of thinking things through before implementation and would appreciate any guidance towards the best resources online or published.

2 Answers

Dane Parchment
MOD
Dane Parchment
Treehouse Moderator 9,610 Points

Honestly (and this is coming from someone with a computer science degree, and is a professional software engineer), practice makes perfect. The best way to learn how to solve programming problems, is to practice them. There really is no book that can help you out with that, because all projects will be different and have their own set of variables that you need to consider when solving them.

That being said, there are some tips:

  1. Learn general software engineering. This includes topics like: Software Requirements (Functional and Non-Functional), Software Architecture Methods, Development Methodologies (SCRUM, AGILE), Testing (Test Drive Development) and more. Granted I went to school and majored in this, but you also have the internet, so finding out about these topics and learning about them should be possible should you put in the work.
  2. Start small. Don't try to build large applications while you are still learning, instead start with a small idea and then expand on it. For example: Try to build a Console/Text based todo-list application. Then give it a GUI. Then create either a web interface or desktop application out of it. Try connecting it to a database. Make it work in real-time. You get the idea. Don't try to build a house while you are still trying to learn what a hammer is.
  3. Learn about Data Structures and Algorithms. These are the more mathy stuff, and do require a lot of abstract thinking, but they are also the difference between a code monkey and a software engineer. Daily i have to try and figure out what sort of data structures I am going to use to solve a problem: Will I use a HashTable? Binary Search Tree? Maybe a simple Queue will work instead? Should I use a merge-sort over a quick-sort? These are all language agnostic and can be implemented in any language, thus laying the ground work for you to solve problems.

Basically the gist I am getting at, is that before you start building a project, you need to learn about the tools you have at your disposal so that you can better utilize them to solve a problem. For example: How would you go about solving an algebra problem if you know nothing about: Variables, addition, subtraction, multiplication, or division? Same concept here. To think like a programmer, you need to understand the tools available to you.

If you want me to provide links to resources for you, let me know.

Matthew Leroe
Matthew Leroe
10,193 Points

Dane, Thanks so much! I will copy and paste this to a text file for future reference. I definitely lack that foundation in computer science/engineering. I've been studying about 4-10 hours a day for a year now. My biggest issue has been practice that leads nowhere. I'm inefficient as a newcomer, even though I regularly see others who are racing past me in the same timeframe, and I want to catch up. I have worked on many projects, only to spend hours stuck on certain sections. I now use:

  1. Stack Overflow
  2. Gitter
  3. Slack
  4. Treehouse Q/A
  5. MDN
  6. W3 Schools
  7. FreeCodeCamp
  8. Medium
  9. HackerNoon
  10. CSS Tricks
  11. MOOC: Coursera/Pluralsight/edX/Udemy/Khan Academy/Itunes U/YouTube
  12. Google Developers
  13. Code Wars/Leet Code/Hacker Rank
  14. Codrops
  15. Smashing Magazine
  16. Facebook / Twitter / Linked In -- to follow developers.
  17. Git Hub

May I have a suggestion on some resources I may have overlooked? I am also struggling with articulating questions in the first place, but have found some of the quickest and most helpful responses right here on Treehouse -- I may be on the cusp of taking my skills to the next level. Thanks again for your time and expertise!

Matt

Dane Parchment
Dane Parchment
Treehouse Moderator 9,610 Points

My first suggestion is to pick a language and git gud with it, learn all of its dirty little secrets so that you can be proficient at solving problems with it. My recommendation for that is: JavaScript, it's easy to learn, hard to master, and provides you access to build every type of program imaginable. Want to make a web app? IOS or Android app? Desktop App? Machine Learning App? Video Game? Enterprise Level App? JavaScript covers it all.

Resources

JavaScript Programming Language
-----------------------------------------------------------------------
You Don't Know JS - https://github.com/getify/You-Dont-Know-JS
A really good online and free book for JavaScript, honestly people should
start off with this book, it's one of the best.

JavaScript Info - https://javascript.info/
A really good online resource for learning all about JavaScript, written as a
series of linked articles. Also a really great resource.
General Software Engineering
-----------------------------------------------------------------------
How To Write A Simple Yet Effective Requirements Document - https://productcoalition.com/how-to-write-a-simple-yet-effective-requirements-document-bda5bf6623e0
A great article about what is within a requirements document.

Omar El Gabry On Medium - https://medium.com/@OmarElGabry
Omar is a software engineer who understands how to explain the many topics covered in it.
I recommend following him and reading his articles on Analysis, Design, and Requirements
Engineering.

Diagrams - https://www.uml-diagrams.org/
This website is considered by many to be the official uml tutorial site, as well as a location to find out how to 
create almost all of the unique diagrams that we software engineers create.
Data Structures and Algorithms
-----------------------------------------------------------------------
Geeks For Geeks - https://www.geeksforgeeks.org/
Literally the goto website for us computer science majors, this is where you start to learn about data structures,
algorithms, and design patterns.

Geeks For Geeks Algorithms - https://www.geeksforgeeks.org/fundamentals-of-algorithms/
Geeks For Geeks Data Structures - https://www.geeksforgeeks.org/data-structures/
Geeks For Geeks Design Patterns - https://www.geeksforgeeks.org/software-design-patterns/
Programming Problems and Interview Practice
-----------------------------------------------------------------------
Hackerrank - https://www.hackerrank.com/
The goto website to practice your data structure and algorithms skills through mock interview questions.
This website is so popular that it is quite common for actual software engineering interviews to take place 
on this website.

Coding Fights/Code Signal - https://codesignal.com/
Another fun programming and interview problems practice website!
Matthew Leroe
Matthew Leroe
10,193 Points

Thanks! Incredibly helpful. I especially look forward to reading Omar El Gabry's articles on Medium. Thanks again!