I think most people who are just getting into programming rush to the keyboard too soon and just want to write code as they go. They seem to underestimate the value of good old pen and paper (or dry erase board) to actually plan out your program and figure out what you want it to do and how to do it before you even get to the computer. They live by the motto of “Hours of coding can save you minutes of planning.”
@@RR-gm7qj The problem is, that only works for people who can stabilize early in the work process and work with the existing structures. However, what are the ones to do who are stabilizing late in the process and tend to adapt to the progress of the work being done? I can tell you from my experience that even though I may have planned something on a project, the final result most of the times didn't have anything even remotely in common with the initial concept. That's why I have started to get at it from two directions: The superstructure (i. e. any interfaces that I want to expose) as that remains rather stable, and the elemental operations that need to be performed to receive certain results. The intermediate parts are usually established somewhere in between as they tend to shift and evolve a lot before the project is finished.
In my opinion, programming is 20% code, 80% problem-solving. If you cannot solve the given problem in your mind, you cannot write the code for it. Therefore, think BEFORE you code!
"If you cannot solve the problem in your mind..." What does that mean in actuality? Is it me thinking of a way to be reminded of a task so I write a short script to my terminal? What does it mean?do you have a clear case? Can you elaborate like you were talking to a five-year-old. Thanks!
@@jhde9067 Being an Engineer requires being able to design highly scalable complex systems and solving problems. Actually writing code is just an artifact of the design. Really, coding is the easy part. Design is the harder part.
Major Points / Summary 1) Know what programming is. It is writing code to solve a problem. To solve problems you need to think more methodically. (Orderly and structured thinking. e.g. like the scientific method) 2) Breaking down problems. Break a hard and complicated problem down into multiple easy and simple problems. (Decomposition) 3) Think algorithmically. Think about turning the solution into a a recipe. (simple step by step instructions)
I learned that a big part of programming is identifying the problem and asking questions, even the wrong questions, until you arrive at the right question that will lead you to a solution.
I'm a chemist that is transitioning to a programming role where I work. After fixing several iterations of the same issues over and over again, I came to the same conclusion. On my whiteboard at my desk, I wrote: "The key to solving a problem isn't the solution itself; it is understanding the problem in the first place." Now I ask questions, and everyone gets mad at me. However, I'd rather ask a lot of questions and code something once than go back and forth a hundred times.
I'd recommend reading up on active listening techniques, they will help you to get even more annoying - well they won't as you will get better on deeply understanding the problem with less iterations ;) But yeah, good software always follows this order in some way. Analyse Plan Implement Test Repeat
@@bobbyrinehart1299 It’s certainly the case that some people will take offense to questions being asked, because it can certainly reflect poorly on them. Questions can imply that the product manager is doing a poor job of communicating the expectations or purpose of the project. They could suggest that earlier developers did a poor job of building a sensible architecture, so that it’s confusing and difficult for somebody to jump into it. People getting offended at questions is probably a sign that the questions needed to be asked.
Yeah the foundations of logic. What are the fundamental axioms ? Are they relevant to the question at hand? Am I making the right conclusions based on those axioms without violating any of the fundamental laws? Etc. Physics is great for that
@@bobbyrinehart1299 Yeah the foundations of logic. What are the fundamental axioms ? Are they relevant to the question at hand? Am I making the right conclusions based on those axioms without violating any of the fundamental laws? Etc. Physics is great for
What really changed the game for me was actually planning the finished project and then working backwards to its most basic parts of that project. Really makes things much simpler and easier to manipulate. But you gotta know the tools and ingredients at your disposal. Once you get that down, it's not bad at all
@Alek WolfI think that what he OP really meant was to start with the deliverables and a deadline and work your way planning backwards from there. You may even start creating an empty setup.exe for you application and writing the user manual first. The user manual and a mockup UI is a great way to get stakeholders involved and reacting to your solution.
I agree. I always thought projects are done this way, until I joined my current organization 4 years back. I have been trying to explain for the past 4 years to begin with the end on mind.
Now I get why Math is closely related to programming. They both contain the basics essentials of deep problem solving and algorithmic structuring of solutions.
Because programming is a direct descendant of theoretical math. Programming was a technique mathematicians used to "apply" their hypothesis in the real world to solve problems. The math was always worked out first, then input into a machine, then the math was twerked to improve the results.
Hello, I'm a 14 year old and just trying out programming because I'm confused on what I actually want to become and this is the most interesting career path that I could think of, I started codecademy in python, but I have one problem, I suck at math and I don't think I am a very good problem solver, does the ability to problem solve improve overtime or am I never gonna get better because I don't want to decide on this and just realize that I can't keep up with everyone else, advice is appreciated, thank you!! :D
@@TitaniumTronic As long as you practice and breaking things down to small chunks and think it through before applying it you'll improve over time. As for how good or bad you are in math, you'll be fine so don't worry about it as long as you know the basics you'll improve over time :)
In my opinion, i think the better approach would be to look for the projects that your present skill can solve, not really waiting to get to an hypothetical entrance point into coding. that way you can also be gaining some confidence as you learn.
I think you'll never know enough especially with web development. So what I did was just start building projects or rebuilding projects and then tweaking things adding new stuff to it. That's how a lot of pro learn it but a few would want you to find your own path.
I have been coding C++ for the grand total of one week and already I feel this. Gotta tweak your mind to think logically, to click into the code. I still have 99% more learning to go but already I see what you mean. One thing I actually find myself doing is over complicating things. I’ll have an int, give it a number, give it an upper and lower limit then square one and then a while loop to print numbers and their squares and I had my head in my hands. Then, I realised all I needed was (x < 10) and that was it.
The best math subject to study for coding is formal logic. It really helped me understand how to solve problems using a logic structure that's easier to code later. I agree with the video also, understanding the problem before you start programming is crucial.
Yeah the foundations of logic. What are the fundamental axioms ? Are they relevant to the question at hand? Am I making the right conclusions based on those axioms without violating any of the fundamental laws? Etc. Physics is great for
This video is spot on, problem solving and decomposition are so crucial but so hard to teach people. I learned problem solving in my early 20s as an aircraft mechanic in the Air Force. I've used these skills for more than 20 years in programming, operations, support, management and in many other parts of my programming career.
I learned something recently. Import code of a website template with CSS and JavaScript files included into one window of your text editor. Now start typing the code line by line into another window using the template as your reference that way you learn what every single line of code is doing. You can even rearrange the code to see if you end up with the same results. Hope this helped someone.
*Edit* A great way to start programming. I have always been amazed at the vastness of code libraries and frameworks that now exist everywhere. Its a big field! Have fun :)
I’m from a Linux background and just started programming 24hrs ago and realized that I needed to break the problems down. I thought it was just me and I found it easier so I’m glad you said this
This is the reason why I decided to become a programmer. It is who I am. I wish in school they would ask, who are you? instead of, what would you like to become. I still got some road ahead of me before I get there, but I am happy doing what I am meant to do. Thank you for the video.👍
Like how a constructional engineer looks at a building and sees the lines of force "flowing" in a construction, an architect sees the harmony in a building and how its occupants use it, a machinist sees the order in which each cut needs to be made to create a shape efficiently, a software engineer needs to see 1). the data flowing through an application, and 2). the transformation steps taken along the way.
I have a physics background and just got more serious about coding, and indeed noticed that it is a lot more similar to math and physics than I initially thought. It’s high level problem solving!
3:00 "That didn't work - WHY didn't that work?" is the key. Every mistake or mishap holds very valuable information. People who only want to make a mistake go away, miss the lesson this mistake teaches them. Whatever led to the (unexpected and undesired) outcome was a set of logical circumstances, not malice. If you make the effort to reveal the underlying logic and understand what caused the effect that you just observed, you'll learn a lot from it.
Right?? It goes both ways. I think it has to have something with us loving to build things and that both are about transformation of data, that in music you transform a certain musical structure to another.
im a musician too, not much a composer, I'm more into improvisation but I really like chord tones so not mindless pentatonic. I hope this can help me..I'm about to start learning code and I thought if what I did in the past could help me
I love the small parts breakdown idea. User stories were something I learned at my bootcamp and it's super helpful in getting me started on any project!
Very good tips. To enhance the skills, I'd suggest writing the simple app you come up with in one language then write the exact same app in another language. For example, a ToDo app in JavaScript and then also in PHP. This will really reinforce your understanding of the basics of thinking like a programmer.
Coming for being a chemistry major I did realize that a lot of the classes I took trained my mind to think in a more algorithmically and now I incorporate the scientific method as my methodology when it come to thinking programmer.
O God, I can't believe this, a youtuber actually teaching something very very useful and qualitative not trying to sell u bullshit. Thanks Andy for your thoughts on this!
I feel you touched on something very true. Programming felt tough at first but, with the added knowledge of discrete math, you start seeing how it is it is to solve problems when you take the time to structure and create algorithms, pick apart the problem into small bits and then it s just watching your syntax depending on the language
This is sooooo helpful. I started a computer science degree ten years ago and was falling behind because I didn't understand these approaches. I'm trying my hand at programming again and I want to thank you for helping me see this now. I think I may have a chance with these tools
You know that you think like a programmer when every decision in your life mentally starts with "if this than that result else this other result" which has it's pros and cons
One thing to add is thinking in terms of delivering a product to a customer. Because that's ultimately what we get paid for. That may sound obvious but for me it never really sunk in until I got my first proper dev job and the first thing we newbies were taught was not some fancy framework or coding practices or anything technical, but how the whole industry and the particular business works. How we interact with clients, how we make sure their needs are met and how what we end up doing is often decided by politics and the wish of the customer as opposed to what we would most like to do, or even what makes sense. It's also very important to practice team work, many beginners including me make the mistake of learning to code, doing their own little projects etc and not doing any serious team work. That can really cause a lot of frustration when you find out that you can't just sit in a corner and code. You have standup meetings, pair programming, demos, retrospectives, sprint planning etc, or even just the little coffee break chats, these things are a much bigger part of being a programmer than most newbies realize. Which is why the stereotype of the quiet, socially awkward guy isn't the best fit for a programmer in the real world, in fact I know very few programmers who are like that. There are many introverts, of course, but nothing like in the movies.
Definitely. Domain knowledge. And, to me, that is in the end the most rewarding part-- knowing that what you're doing is helping people in their everyday life do something easier, better, and more profitably because you gave them the tools to do it.
Apreciate the concise manner you've presented the core concepts - 1) It's about problem solving 2) Holistic vs detailed approach ( big picture vs. 1 big problem = number small problems ) 3) Computers are dumb - so you must be pretty sure what you're telling them to do exactly - as oposed to what you want as a end result
Programming is all about understanding the BUSINESS of your customer and modeling portions of it to create something useful which meet or satisfy some very specific need(s).
What really can help wannabe Software devs is not just learning code, but learning software design patterns too. They exist for a reason. For example, learning to normalise data in a database to 3rd normal form can really help you see where different data should be stored, and it can help inform how that data is gathered and how an API interacts with it. If you are using the OO paradigm in your project, something like UML, while not infallible, can help you break the project down in to it's composite parts.
Hi, I'm a "senior" programmer and I 100% agree with what you said. A lot of people seem to think programming is something to learn by heart and mindlessly pissing lines of codes. It's not, it's a mindset. I did not struggle much on learning programming because I graduated from a science background (more specifically Chemistry), so "methodically thinking" was kind of natural. It can get really hard if you're not already used to think that way. No matter how you know the syntax.
Ok let's say you weren't from a background of hard sciences. What advice you would give yourself to prepare beforehand for taking up the programmer route
Thanks for the video. As someone who has switched from a career in science to software development, you are spot on about the similarities with the scientific method.
My first app was a simple program that drew 3 dimensional surfaces (first one just drew a parabola using lines) on a TI-83 in high school. I made my first useful app on a TI-83 that solved the quadratic for me in college. Never went much further than that (on my own at least, just various courses otherwise). I think I should study up and switch careers (currently restaurants). Thanks!
Don't worry. You do not need to know how to build a linked list, build quick sort algorithm from scratch for example to survive as a programmer from 2010s. Nevermind. Most modern programming languages have all those data structures and algorithms built-in. For example, in Javascript, you can seamlessly create a linked list just by using Javascript array as the array is dynamic by default.
I think and hope that this is where my intelligence and definitely reasonable ability to grasp concepts I don't technically know will help me out a bit. What I will never forget is my first array into programming. Where to begin? I ended up reading a lot, and one day I was reading a discussion between someone who wanted to get a clear definition of what an "instance" is and several highly eloquent people trying to explain it to him. This led to 3 completely different perspectives from which it was explained - all meant to help someone grasp the same concept. It was absolutely beautiful, and what attracts me to making things that have such huge interactive potential... It's the sense of the power of thought, crystallized into tangible realities. Naturally, I have not, nor will I ever, work in programming for a day of my life. Your fears for my soul are appreciated, but unwarranted. But I'm going to try and make a game.
I'm a total beginner and I'm glad you mentioned important steps to take. I had always thought the computer knows what I want it to do, now I'm exposed and can't escape but humble and learn to code. I need to know a little more from you, Andy. I'm desperate, I want to create an app for the school for teachers in my country but I have no idea how to start it. Your tips kinda moving me in a direction I wanna go right now. Thanks bud, you're awesome, just so you know.
LOL The computer knows what you want to do exactly as much as the pencil knows what you want to draw, or the brick knows the house you want to build! It's amazing to think - all this machine does at the core is move around binary digits and perform simple logical manipulations on them, and we've built everything off that, piece by piece, up to a system where I can send this message across the world. A bit like that simple aforementioned brick, and wood plank, and iron girder, have built up enormous cities.
I have actually been looking for somebody just like you. This is exactly why it turns out, coding is working for me. I'm beginning to get there. I think I'll be reaching out. Hope you're still active. Just found you.
I share the same way of thinking. I never jump into coding at first, sometimes I spend 60% of exam time figuring out everything and seeing through the problem. Coding comes easy if you know the syntax, it's just the way to express your thoughts to the computer.
I'm a 46 year old professional that has worked in enterprise data storage for 20+ years. I'm no stranger to 1s and 0s. Even with this experience, writing Java functions (without built in methods), for example, is incredibly difficult. I decided to expand my skills and am taking a programming course and it is an incredible struggle. I think I discovered that I'm a statistical thinker not an algorithmic one, if that makes sense.
From the UK with a full time job as a mechanical engineer, always clicked with computer related stuff through school but decided to take the engineering apprenticeship route at 18. Now 24 and at January I wanted a change and CS/software engineering is what I want to be doing. Currently working through CS50 and from there I'm going to dive into a few different languages. If anyone wants to connect and help each other out at these early stages lets do it 🤙
@@insulinpapi awesome that's exactly what I want to get into as well. I've got R under my belt and some Python, Java and C basics, but want to move onto JS and do Python more seriously. I don't have any other social media accounts except for linkedin, can I dm you there?
One thing, though, that needs to be kept in mind is that your approach to solving problems greatly depends on the way how you are processing information. For example, you cannot force someone who is used to adjusting to the progression of the work into a strict structure as that would cause him to grind to an abrupt halt. On the other hand, someone who is relying on solid structures cannot be made to overhaul things on the fly as it tends to completely derail his thought patterns. Another point is, are you more of a team player, or are you showing your strengths when you are working alone or at most in a small group? Then, how is that particular individual picking up things and events in his vicinity? If he's going by the raw information and then figuring out how all that correlates, he can spin out completely new solutions to previously unknown or yet unsolved problems. If, however, he is looking for patterns, he would be a good candidate for finding existing solutions and adapting them to suit the problem at hand. The one thing that definitely is of an advantage is the capability to keep your own thought processes running even though there may be interference from the outside. Some people are better at it than others, however, that doesn't mean that theoneswho would easily get distracted by outside stimuli or their own imagination are incapable of thinking by themselves. They may rely on certain environmental conditions (i. e. no distracting stimuli) to be effective, and many times they have also found some means of mitigating their frequently fickle concentration (backgrounding certain thought processes is also a viable option). Plus depending on how these traits are prioritized, they may also result in some interesting thought processes and work styles.
I learned methodically thinking, by writing pseudocode. Litteraly writing what i wanted to happen in hand, then breaking down how i would make it happen in code.
I've written programmes as a hobby for 4 decades and it is the problem solving that has always been why I do it. Syntax can be irritating but, if you've taken the time to work through the problem being addressed and worked out the steps needed to arrive at the solution, the syntax becomes (quite literally) a detail. I began programming when it was totally normal to work on paper before ever going near a key board (or, I kid you not, paper-tape puncher) and to write the entire programme in correct syntax on paper before, very carefully, entering the instructions to the computer. You didn't even get to consider syntax until the plan was concrete and fine-grained. I personally still find it amusing (although admit to a little envy) when I see people speed typing, racing through multiple auto-correct options, and debugging programmes.
RTFM will get you closer to first principles. Even as a senior dev I always need to push in this direction. Even if you find other “easier” ways to solve the immediate problem, familiarity with the original docs will serve you well. Which brings me to the second point, which is value your understanding, don’t just stop when you get an idea of how you might solve the problem at hand, but concentrate on building the best base of knowledge with which to move forward. Take your knowledge acquisition seriously. This is what will enable your problem solving abilities.
Good video 🙂👍 When I listen to you the method "reduction" from theoretical computer science pops into my mind, like even if we are solving various different problems with computer programs, lots of them are just variants of the same basic problems like finding a route while minimizing some kind of costs, sorting something most effectively, ... Another thing which I think is very important is switching perspectives. Because even when you develop a program completely by yourself, that means you know everything happening there, you must know that there are scopes and that an object, whatever it is, doesn't know everything happening. So you need to give it the information it needs, you need to think about how the information changes, how to assure that changes get everywhere where there are needed (referencing correctly). Another key skill, which I cannot surely say that I already learned it as I am only starting my career is getting out from the microcosmos of solving problems in one programming language to developing whole software, which will need more than one programming language, additional software etc.
create checklist on the tiny part helps a lot, it helps you to not get overwhelm by how big the project is, and its really help you track how much you've done
I thank you a lot for everything you teach, I am in my beginnings as a self-taught software developer and by putting into practice what you say I see that it works and gives me confidence to continue without fear. THANK YOU A LOT! see you soon!!
2:42 it is possible to create Gold from other elements in a lab(using nuclear fusion or fission) but you get only small amounts, its extremly expensive and the gold is would be radioactive for a few hundred years.
I started as a software tester with no experience and now 4 years later I am a developer in the same company and I fully agree with you. When fixing a bug, or adding something to a feature more often then not I spend 80% of the time thinking and studying and 20% writing and testing the changes. Also on the todo list challenge when I first started I would think in the terms of checkbox and layout. Now I would start by drawing a user flow and discussing with myself if a single item should be a record in a related database or a json object. (I would now vote for the seccond)
I've always thought logically about many things. So computers were perfect for me long ago, since I always take things apart in my head. My problem is with programming, is I didn't know where to start. After 30+ years of living after childhood, I think I got it. So it's videos like these that help reinforce how it works. Building blocks help build a program.
Great analogy with science behind the scenes. If you do learn syntax of programming language, its the same as learning periodic chemicals table. Its good to know it, but solely knowing every piece good enough won't tell you alone what to do with that. And thats where methodic thinking and problem solving comes to life. Without them - you are destined to be an executor-only, which will sooner or later be too short.
Its a combination of things: * solving the problem at hand * being able to translate this problem into a mental model * coming up with a solution using this model that solves what you're trying to achieve * knowing how to express this solution using the programming language at hand * knowing the tools to use in order to write the solution in the programming language So if you just focus on the tools or the language you will be stuck. The key is the point of taking a solution and being able to translate that and express it in language X.
I've been programming for decades so I thought I could just chip in with a small tip. Don't know how I ended up here exactly but anyway. First, realise that no one can make something good when they don't understand the problem space. If you never worked on a certain type of problem before, you are a beginner in that area, no matter how many years you have programmed. Don't fall for the RUclips videos where people write perfect code from scratch on hard problems, that never happens and you have no idea how long they spent working on that code before making the video. My work method in these cases are as follows: 1. Make it work 2. Make it better 3. Repeat It's important to as quickly as possible get something working. It doesn't matter if it's complete crap. When you reached that point you understand the problem better, what you can improve, what you need to rewrite or discard to solve the problem better. Then repeat that process until you're satisfied with the solution. Experience makes the process easier of course and what constitutes a hard problem, but what never works is just thinking about how to solve a problem, that's part of it but until you have something working you don't know.
It's exactly how I approach programming. Been doing it for over 10 years, and found that my first "draft" is always messy, but it works and it really helps me think about the problem from different angles. Then polishing comes in, until I'm happy with the final result.
Bugs are what i wish i knew more about. Bugs in the begining, brought down the whole project. Now, i can fix most of them. But there is anywhere from days to years fixing them. Right now im trying to track down a double free that is probably caused by usage of library code.
Good vid, but, the “secret sauce” CS grads learn is: data structures, algos & assembly. Especially assembly... reference Plato’s ladder of knowledge if you don’t get what I mean.
As an entry level programmer, I always had that "where to start" feeling, but as soon as I begin to code, then it hit me, every single time. That I had to decompose things and start again.
These are all good points. I do these things constantly, but I do something additionally. Trial and error is a great tool, breaking down problems is the core of problem solving, thinking algorithmically is a must. However, I always design code before I put my hand on the keyboard. Because I am disciplined and I understand data structures, runtime analysis, object oriented design patterns, model view controller, etc. I am able to learn and relearn syntax, new libraries, new languages, full stack development, etc. extremely quickly compared to others at my job. Code isn't difficult if you understand the principles behind computing that transcend all languages and software technologies. If you can design an algorithm or software system beforehand, you got it. Most people I have met (even those who code professionally) can't. Every problem, and sub problem, I write code for prompts me to think of multiple solutions. I pick and choose between their traits until I get the best of each, but at the core is knowing how to design and visualize each solution.
When it came to think algorithmically and you compared it to creating recipes, I went out of full screen to subscribe instantly. Then I realized I already had... :D Great input Andy, helps a "young" programmer so much!
really needed this, because i am the same in the sense of learning basic syntax of c++ and understanding the basics but when it comes to creating programs i tend to struggle not knowing how to express myself in the IDE but when i look at tutorials that really makes sense to me so i can read the code and understand it but cannot express it myself *yet* so my logic is poor is there any video of yours that talk about "problem solving" or "how to have better understanding of logic in programming"? really appreciate the content!♥
@@sowianka9258 i know right. this is the point where most people give up but keep your head high, we shouldn't give up but get better and better we are on the right path if we struggle
@@Asterite Many thanks for that! Thats true ,we need to keep going , dont loose the trust in ourselves and do what we love. I hope one day it will click :)
Loved the video. I really appreciate that point made about how to take the next step beyond the syntax of a language and begin solving problems. I’m currently at that point now with python.
I can definitely see how this would help me. I will now incorporate using a notebook to write my steps down and brainstorm before just diving in to the code and guessing on what to do. Thank you!
I've found new programmers don't have the mentality that they can actually fix bugs, especially difficult ones. They hit a roadblock and just stop. Investigating the error messages and following the lead is all that is required to figure out what's wrong, but so many people just don't do this, they Google the output and if it's not on stack overflow they are completely stuck.
I was so guilty of this myself when I just started. Until I actually started reading the backtrace in error logs, reading the variable values (with xdebug) I was working with, I got like 3x times faster with solving problems
When I get some funky problem in my code. I some times panic and go shit! I'm going to have to restart... Then I throw away that panic and say "I will solve this problem". When I throw away that panic I start to think alot better. I was in the CSS and Javascript portion of my webpage and nothing was working. I went all the way back to the HTML and found the problem laid there..... Issue solved but it would never had happened if I didnt start breaking things down and looking at each brick I placed in my wall so to speak. I agree with this video 100 percent. Feels good when you solve something on your own.
Somebody asked me what he should do to prepare to be a programmer. I told him to play chess and study math. I think those two skills learned as a child helped me to become a good programmer.
interesting answer - I don't quite agree that those skills would translate to programming, though. I would suggest knowing how to find out answers (ie. learning how to use Google) is much more important.
@@intheburrows Chess teaches you to think logically and visualize stuff. Math and most programming languages share a lot of symbols and teach you to think abstractly. Knowing how to use Google is definitely helpful, but I started programming long before the internet came out. Back then, we just had books that showed how a particular language was constructed.
Thanks for this video. I'm currently going through working on python. I"m coming up with problems I need to solve. I work as an editor and creative. I'm coming up with automation to help me organize the footage and rename files automatically to where I don't have to do things manually. I structured my naming conventions so that way when I run the automated scripts I don't run into problems.
Most of it makes sense. However I believe that truly great programmers go beyond this, as they submerge themselves into the wish (not the problem) that lies underneath. And through analysis be able to see the consequences, opportunities and potential problems, and being able to discuss this with stakeholders (as they usually miss the finer details).
Great video! Was starting to get into programming as a teen, but unfortunately gave it up to pursue other fields of IT like network administration. Now that I have those goals out of the way, I've come back to learning how to program again for my cybersecurity goals and this provided some great insight! Subscribed and can't wait to watch more.
When I was learning Node.js I turned on VSCode and started typing. 2 years later that doesn't cut it anymore. Today I crack open Word and write down the steps needed to solve the problem. 15 minutes of preplanning can save hours to days of rework.
to me it means to ditch emotions, and rely solely on logical thinking. Plan things out in your head or on paper so they make sense logically, try it, if it don't work then ask why and try to resolve it. I love programming cause I tend to me more emotional and when I program and think emotionally it lets me know instantly.
Applying the Backwards Law also helps: If you are stuck at some spot in your project, there's no use in forcing a solution as you are actively preventing it. However, backgrounding the entire thing to let your subconscious do the work and deliberately concentrate on something else to distract yourself from the problem at hand can work wonders: Instead of agonizing about it and eventually getting frustrated, you can relax by doing something else, and seemingly out of the blue a hint or even a solution to your problem pops up in your conscious mind.
i learned 11 programming languages over the years and i dont write software. mostly bcuz my ideas suck. but lately i have been having good ideas and i am writing code again. i became a cnc machinist to pay the bills. i am a programmer in that for last 20 yrs tho.
I’ve been working as a tutor for a few months and it’s made me realize that a lot of people do struggle to think like a programmer. My personal take is that it’s difficult for most people to think abstractly and that is why they struggle. Others do so more naturally, like in my case.
This, and other thing is often people have problems with understanding what they read and a ton of people who struggle to learn anything are just stressed
Do you have a better sense of what it means to "think like a programmer"?
Code is like a tool. You have to think like a carpenter who uses a hammer to nail wood
Definitely.
I think most people who are just getting into programming rush to the keyboard too soon and just want to write code as they go. They seem to underestimate the value of good old pen and paper (or dry erase board) to actually plan out your program and figure out what you want it to do and how to do it before you even get to the computer. They live by the motto of “Hours of coding can save you minutes of planning.”
yes now that you have explained. it makes sense never thought about it in that way, scientific method
@@RR-gm7qj The problem is, that only works for people who can stabilize early in the work process and work with the existing structures. However, what are the ones to do who are stabilizing late in the process and tend to adapt to the progress of the work being done?
I can tell you from my experience that even though I may have planned something on a project, the final result most of the times didn't have anything even remotely in common with the initial concept. That's why I have started to get at it from two directions: The superstructure (i. e. any interfaces that I want to expose) as that remains rather stable, and the elemental operations that need to be performed to receive certain results. The intermediate parts are usually established somewhere in between as they tend to shift and evolve a lot before the project is finished.
In my opinion, programming is 20% code, 80% problem-solving. If you cannot solve the given problem in your mind, you cannot write the code for it. Therefore, think BEFORE you code!
Amen!
I think solution, therefore I code!
Beautiful
"If you cannot solve the problem in your mind..."
What does that mean in actuality?
Is it me thinking of a way to be reminded of a task so I write a short script to my terminal?
What does it mean?do you have a clear case? Can you elaborate like you were talking to a five-year-old.
Thanks!
@@jhde9067 Being an Engineer requires being able to design highly scalable complex systems and solving problems. Actually writing code is just an artifact of the design. Really, coding is the easy part. Design is the harder part.
Major Points / Summary
1) Know what programming is. It is writing code to solve a problem. To solve problems you need to think more methodically. (Orderly and structured thinking. e.g. like the scientific method)
2) Breaking down problems. Break a hard and complicated problem down into multiple easy and simple problems. (Decomposition)
3) Think algorithmically. Think about turning the solution into a a recipe. (simple step by step instructions)
Thank you 💓
thanks pal
Thanks bro.
thx
arigathanks 👍❤️
I learned that a big part of programming is identifying the problem and asking questions, even the wrong questions, until you arrive at the right question that will lead you to a solution.
I'm a chemist that is transitioning to a programming role where I work. After fixing several iterations of the same issues over and over again, I came to the same conclusion. On my whiteboard at my desk, I wrote: "The key to solving a problem isn't the solution itself; it is understanding the problem in the first place." Now I ask questions, and everyone gets mad at me. However, I'd rather ask a lot of questions and code something once than go back and forth a hundred times.
I'd recommend reading up on active listening techniques, they will help you to get even more annoying - well they won't as you will get better on deeply understanding the problem with less iterations ;)
But yeah, good software always follows this order in some way.
Analyse
Plan
Implement
Test
Repeat
@@bobbyrinehart1299 It’s certainly the case that some people will take offense to questions being asked, because it can certainly reflect poorly on them. Questions can imply that the product manager is doing a poor job of communicating the expectations or purpose of the project. They could suggest that earlier developers did a poor job of building a sensible architecture, so that it’s confusing and difficult for somebody to jump into it.
People getting offended at questions is probably a sign that the questions needed to be asked.
Yeah the foundations of logic. What are the fundamental axioms ? Are they relevant to the question at hand? Am I making the right conclusions based on those axioms without violating any of the fundamental laws? Etc. Physics is great for that
@@bobbyrinehart1299 Yeah the foundations of logic. What are the fundamental axioms ? Are they relevant to the question at hand? Am I making the right conclusions based on those axioms without violating any of the fundamental laws? Etc. Physics is great for
What really changed the game for me was actually planning the finished project and then working backwards to its most basic parts of that project. Really makes things much simpler and easier to manipulate. But you gotta know the tools and ingredients at your disposal. Once you get that down, it's not bad at all
Planning is key. The adage is minutes of planning can save hours of coding...or something like that 😊
How to eat an elephant right? One bite at a time.
@Alek WolfI think that what he OP really meant was to start with the deliverables and a deadline and work your way planning backwards from there. You may even start creating an empty setup.exe for you application and writing the user manual first. The user manual and a mockup UI is a great way to get stakeholders involved and reacting to your solution.
@@AndySterkowitz agreed
I agree. I always thought projects are done this way, until I joined my current organization 4 years back. I have been trying to explain for the past 4 years to begin with the end on mind.
Now I get why Math is closely related to programming. They both contain the basics essentials of deep problem solving and algorithmic structuring of solutions.
Because programming is a direct descendant of theoretical math. Programming was a technique mathematicians used to "apply" their hypothesis in the real world to solve problems. The math was always worked out first, then input into a machine, then the math was twerked to improve the results.
Programming IS math, its just that you organize the "math laws" in programming the way you want them to work together.
Hello, I'm a 14 year old and just trying out programming because I'm confused on what I actually want to become and this is the most interesting career path that I could think of, I started codecademy in python, but I have one problem, I suck at math and I don't think I am a very good problem solver, does the ability to problem solve improve overtime or am I never gonna get better because I don't want to decide on this and just realize that I can't keep up with everyone else, advice is appreciated, thank you!! :D
@@TitaniumTronic As long as you practice and breaking things down to small chunks and think it through before applying it you'll improve over time. As for how good or bad you are in math, you'll be fine so don't worry about it as long as you know the basics you'll improve over time :)
@@myth5002 Thank you!
The main thing is to not be intimidated. Take on tasks you may not be able to do. You get stronger when you struggle.
🔴 Please make a video about: When to know is enough learning, and get ready to take the first project as a freelancer
In my opinion, i think the better approach would be to look for the projects that your present skill can solve, not really waiting to get to an hypothetical entrance point into coding. that way you can also be gaining some confidence as you learn.
He already mentioned that many times!
Learning never stops. Start doing projects alongside learning
I think you'll never know enough especially with web development. So what I did was just start building projects or rebuilding projects and then tweaking things adding new stuff to it. That's how a lot of pro learn it but a few would want you to find your own path.
Simple answer! Never, it will never be enough!
I have been coding C++ for the grand total of one week and already I feel this. Gotta tweak your mind to think logically, to click into the code. I still have 99% more learning to go but already I see what you mean. One thing I actually find myself doing is over complicating things. I’ll have an int, give it a number, give it an upper and lower limit then square one and then a while loop to print numbers and their squares and I had my head in my hands. Then, I realised all I needed was (x < 10) and that was it.
The best math subject to study for coding is formal logic. It really helped me understand how to solve problems using a logic structure that's easier to code later.
I agree with the video also, understanding the problem before you start programming is crucial.
My favorite math course for CS and the one that was most useful was discrete math
Formal Logic? Do you mean the propositions, premises and conclusions kind of logic?
@@imt3206 Yep, that's the one.
Formal logic and symbolic logic are courses from the philosophy department.
Yeah the foundations of logic. What are the fundamental axioms ? Are they relevant to the question at hand? Am I making the right conclusions based on those axioms without violating any of the fundamental laws? Etc. Physics is great for
This video is spot on, problem solving and decomposition are so crucial but so hard to teach people. I learned problem solving in my early 20s as an aircraft mechanic in the Air Force. I've used these skills for more than 20 years in programming, operations, support, management and in many other parts of my programming career.
You speak the truth Andy. Once you step away from tutorials and start building stuff all of the points you just made start making sense.
Love to hear that! This has rang true from my experience....theory is important to learn but is difficult to grasp without reference experiences.
I learned something recently. Import code of a website template with CSS and JavaScript files included into one window of your text editor. Now start typing the code line by line into another window using the template as your reference that way you learn what every single line of code is doing. You can even rearrange the code to see if you end up with the same results. Hope this helped someone.
Thanx
*Edit* A great way to start programming. I have always been amazed at the vastness of code libraries and frameworks that now exist everywhere. Its a big field! Have fun :)
@@jsmythib how else can you enter code besides "manually" genuine friendly question not a challenge
@@punkisinthedetails1470 It must of been late night! :)
How do you do that ?
I’m from a Linux background and just started programming 24hrs ago and realized that I needed to break the problems down. I thought it was just me and I found it easier so I’m glad you said this
Talking aloud to a random object on your desk can be really helpful to decompose and solve your problem.
This is the reason why I decided to become a programmer. It is who I am. I wish in school they would ask, who are you? instead of, what would you like to become. I still got some road ahead of me before I get there, but I am happy doing what I am meant to do. Thank you for the video.👍
Like how a constructional engineer looks at a building and sees the lines of force "flowing" in a construction, an architect sees the harmony in a building and how its occupants use it, a machinist sees the order in which each cut needs to be made to create a shape efficiently, a software engineer needs to see
1). the data flowing through an application, and
2). the transformation steps taken along the way.
I have a physics background and just got more serious about coding, and indeed noticed that it is a lot more similar to math and physics than I initially thought. It’s high level problem solving!
That 12-level indented code in the background raises some significant questions here.
3:00 "That didn't work - WHY didn't that work?" is the key.
Every mistake or mishap holds very valuable information. People who only want to make a mistake go away, miss the lesson this mistake teaches them. Whatever led to the (unexpected and undesired) outcome was a set of logical circumstances, not malice. If you make the effort to reveal the underlying logic and understand what caused the effect that you just observed, you'll learn a lot from it.
I think that being a musician, having written some of my own music, has helped me tremendously with learning to code, and actually coding.
This, and other way around as well. Learning programming has made me a better musician and composer.
@@CptNelson Piano and Guitar here :D and TRUE
Right?? It goes both ways. I think it has to have something with us loving to build things and that both are about transformation of data, that in music you transform a certain musical structure to another.
im a musician too, not much a composer, I'm more into improvisation but I really like chord tones so not mindless pentatonic. I hope this can help me..I'm about to start learning code and I thought if what I did in the past could help me
I love the small parts breakdown idea. User stories were something I learned at my bootcamp and it's super helpful in getting me started on any project!
Awesome...
Very good tips. To enhance the skills, I'd suggest writing the simple app you come up with in one language then write the exact same app in another language. For example, a ToDo app in JavaScript and then also in PHP. This will really reinforce your understanding of the basics of thinking like a programmer.
Coming for being a chemistry major I did realize that a lot of the classes I took trained my mind to think in a more algorithmically and now I incorporate the scientific method as my methodology when it come to thinking programmer.
Hello from a fellow chemist.
O God, I can't believe this, a youtuber actually teaching something very very useful and qualitative not trying to sell u bullshit. Thanks Andy for your thoughts on this!
I feel you touched on something very true. Programming felt tough at first but, with the added knowledge of discrete math, you start seeing how it is it is to solve problems when you take the time to structure and create algorithms, pick apart the problem into small bits and then it s just watching your syntax depending on the language
"When working with security, I use Discrete Mathematics. Yes, I am a discrete mathematician." -- Art Benjamin
Bro this is very accurate , I really was struggling with c until I learnt discrete math , I am still learning both
This is sooooo helpful. I started a computer science degree ten years ago and was falling behind because I didn't understand these approaches. I'm trying my hand at programming again and I want to thank you for helping me see this now. I think I may have a chance with these tools
You know that you think like a programmer when every decision in your life mentally starts with "if this than that result else this other result" which has it's pros and cons
I do this all day, every day, and I enjoy my job. You hit the nail on the head.
9:42 Great point. Computer doesn’t do what you want. It does what you told it to do.
And children do neither
@@johnjordan3552 Programming humans is infinitely more challenging than programming computers, as challenging that might be.
One thing to add is thinking in terms of delivering a product to a customer. Because that's ultimately what we get paid for. That may sound obvious but for me it never really sunk in until I got my first proper dev job and the first thing we newbies were taught was not some fancy framework or coding practices or anything technical, but how the whole industry and the particular business works. How we interact with clients, how we make sure their needs are met and how what we end up doing is often decided by politics and the wish of the customer as opposed to what we would most like to do, or even what makes sense.
It's also very important to practice team work, many beginners including me make the mistake of learning to code, doing their own little projects etc and not doing any serious team work. That can really cause a lot of frustration when you find out that you can't just sit in a corner and code. You have standup meetings, pair programming, demos, retrospectives, sprint planning etc, or even just the little coffee break chats, these things are a much bigger part of being a programmer than most newbies realize. Which is why the stereotype of the quiet, socially awkward guy isn't the best fit for a programmer in the real world, in fact I know very few programmers who are like that. There are many introverts, of course, but nothing like in the movies.
Definitely. Domain knowledge.
And, to me, that is in the end the most rewarding part-- knowing that what you're doing is helping people in their everyday life do something easier, better, and more profitably because you gave them the tools to do it.
Apreciate the concise manner you've presented the core concepts - 1) It's about problem solving 2) Holistic vs detailed approach ( big picture vs. 1 big problem = number small problems ) 3) Computers are dumb - so you must be pretty sure what you're telling them to do exactly - as oposed to what you want as a end result
This is absolutely what I’m trying to do, develop a crazy imagination mindset when programming and solving problems, creating things. 💪
Programming is all about understanding the BUSINESS of your customer and modeling portions of it to create something useful which meet or satisfy some very specific need(s).
What really can help wannabe Software devs is not just learning code, but learning software design patterns too. They exist for a reason. For example, learning to normalise data in a database to 3rd normal form can really help you see where different data should be stored, and it can help inform how that data is gathered and how an API interacts with it.
If you are using the OO paradigm in your project, something like UML, while not infallible, can help you break the project down in to it's composite parts.
Hi, I'm a "senior" programmer and I 100% agree with what you said.
A lot of people seem to think programming is something to learn by heart and mindlessly pissing lines of codes. It's not, it's a mindset.
I did not struggle much on learning programming because I graduated from a science background (more specifically Chemistry), so "methodically thinking" was kind of natural.
It can get really hard if you're not already used to think that way. No matter how you know the syntax.
Ok let's say you weren't from a background of hard sciences. What advice you would give yourself to prepare beforehand for taking up the programmer route
Breakpoints are a life saver for problems as well.
Thanks for the video. As someone who has switched from a career in science to software development, you are spot on about the similarities with the scientific method.
My first app was a simple program that drew 3 dimensional surfaces (first one just drew a parabola using lines) on a TI-83 in high school. I made my first useful app on a TI-83 that solved the quadratic for me in college. Never went much further than that (on my own at least, just various courses otherwise). I think I should study up and switch careers (currently restaurants). Thanks!
I needed this. I failed data structures last semester and I'm coming back with a vengeance this fall.
You got this!
Don't worry. You do not need to know how to build a linked list, build quick sort algorithm from scratch for example to survive as a programmer from 2010s. Nevermind. Most modern programming languages have all those data structures and algorithms built-in. For example, in Javascript, you can seamlessly create a linked list just by using Javascript array as the array is dynamic by default.
maannn. Now I am doing data structure in this semester 😂
I think and hope that this is where my intelligence and definitely reasonable ability to grasp concepts I don't technically know will help me out a bit.
What I will never forget is my first array into programming. Where to begin? I ended up reading a lot, and one day I was reading a discussion between someone who wanted to get a clear definition of what an "instance" is and several highly eloquent people trying to explain it to him. This led to 3 completely different perspectives from which it was explained - all meant to help someone grasp the same concept.
It was absolutely beautiful, and what attracts me to making things that have such huge interactive potential... It's the sense of the power of thought, crystallized into tangible realities.
Naturally, I have not, nor will I ever, work in programming for a day of my life. Your fears for my soul are appreciated, but unwarranted.
But I'm going to try and make a game.
Data Structures and algorithms helped me a lot with my thought process
actually good tips, thought this was gonna be like every youtube video
I'm a total beginner and I'm glad you mentioned important steps to take. I had always thought the computer knows what I want it to do, now I'm exposed and can't escape but humble and learn to code. I need to know a little more from you, Andy. I'm desperate, I want to create an app for the school for teachers in my country but I have no idea how to start it. Your tips kinda moving me in a direction I wanna go right now. Thanks bud, you're awesome, just so you know.
LOL The computer knows what you want to do exactly as much as the pencil knows what you want to draw, or the brick knows the house you want to build!
It's amazing to think - all this machine does at the core is move around binary digits and perform simple logical manipulations on them, and we've built everything off that, piece by piece, up to a system where I can send this message across the world.
A bit like that simple aforementioned brick, and wood plank, and iron girder, have built up enormous cities.
A big part of professional programming is also understanding that some people are just really gifted and the rest of us are just scraping by. :D
Nice of you to drop in a new option... if coding fails, there is always alchemy! lol. Thanks for the videos Andy, they keep me motivated!
I have actually been looking for somebody just like you. This is exactly why it turns out, coding is working for me. I'm beginning to get there. I think I'll be reaching out. Hope you're still active. Just found you.
I share the same way of thinking. I never jump into coding at first, sometimes I spend 60% of exam time figuring out everything and seeing through the problem. Coding comes easy if you know the syntax, it's just the way to express your thoughts to the computer.
I'm a 46 year old professional that has worked in enterprise data storage for 20+ years. I'm no stranger to 1s and 0s. Even with this experience, writing Java functions (without built in methods), for example, is incredibly difficult. I decided to expand my skills and am taking a programming course and it is an incredible struggle. I think I discovered that I'm a statistical thinker not an algorithmic one, if that makes sense.
Thank you for this video. This has helped me out so much not only in my programming life but also my daily life.
I was honestly just thinking about this lol. Thanks for the vid Andy!
Cheers!
Coding has fixed my sleep, i used to have insomnia but now after coding in the evenings my brain is exhausted and really just wants that deep sleep.😂
From the UK with a full time job as a mechanical engineer, always clicked with computer related stuff through school but decided to take the engineering apprenticeship route at 18. Now 24 and at January I wanted a change and CS/software engineering is what I want to be doing. Currently working through CS50 and from there I'm going to dive into a few different languages. If anyone wants to connect and help each other out at these early stages lets do it 🤙
Let’s do it
Yo I'm keen too. What languages do want to look at?
I’m thinking of going into Python or JavaScript first once I’ve completed CS50
@@insulinpapi awesome that's exactly what I want to get into as well. I've got R under my belt and some Python, Java and C basics, but want to move onto JS and do Python more seriously. I don't have any other social media accounts except for linkedin, can I dm you there?
hey! I recently started with CS50 too and got basic knowledge in Python. I'm down for a study together session can I add you on discord?
In a nushell you describe perfectly what it means to be a developer, best description I’ve heard to date
One thing, though, that needs to be kept in mind is that your approach to solving problems greatly depends on the way how you are processing information. For example, you cannot force someone who is used to adjusting to the progression of the work into a strict structure as that would cause him to grind to an abrupt halt. On the other hand, someone who is relying on solid structures cannot be made to overhaul things on the fly as it tends to completely derail his thought patterns.
Another point is, are you more of a team player, or are you showing your strengths when you are working alone or at most in a small group?
Then, how is that particular individual picking up things and events in his vicinity? If he's going by the raw information and then figuring out how all that correlates, he can spin out completely new solutions to previously unknown or yet unsolved problems. If, however, he is looking for patterns, he would be a good candidate for finding existing solutions and adapting them to suit the problem at hand.
The one thing that definitely is of an advantage is the capability to keep your own thought processes running even though there may be interference from the outside. Some people are better at it than others, however, that doesn't mean that theoneswho would easily get distracted by outside stimuli or their own imagination are incapable of thinking by themselves. They may rely on certain environmental conditions (i. e. no distracting stimuli) to be effective, and many times they have also found some means of mitigating their frequently fickle concentration (backgrounding certain thought processes is also a viable option).
Plus depending on how these traits are prioritized, they may also result in some interesting thought processes and work styles.
I learned methodically thinking, by writing pseudocode. Litteraly writing what i wanted to happen in hand, then breaking down how i would make it happen in code.
I've written programmes as a hobby for 4 decades and it is the problem solving that has always been why I do it. Syntax can be irritating but, if you've taken the time to work through the problem being addressed and worked out the steps needed to arrive at the solution, the syntax becomes (quite literally) a detail. I began programming when it was totally normal to work on paper before ever going near a key board (or, I kid you not, paper-tape puncher) and to write the entire programme in correct syntax on paper before, very carefully, entering the instructions to the computer. You didn't even get to consider syntax until the plan was concrete and fine-grained. I personally still find it amusing (although admit to a little envy) when I see people speed typing, racing through multiple auto-correct options, and debugging programmes.
RTFM will get you closer to first principles. Even as a senior dev I always need to push in this direction. Even if you find other “easier” ways to solve the immediate problem, familiarity with the original docs will serve you well. Which brings me to the second point, which is value your understanding, don’t just stop when you get an idea of how you might solve the problem at hand, but concentrate on building the best base of knowledge with which to move forward. Take your knowledge acquisition seriously. This is what will enable your problem solving abilities.
Good video 🙂👍
When I listen to you the method "reduction" from theoretical computer science pops into my mind, like even if we are solving various different problems with computer programs, lots of them are just variants of the same basic problems like finding a route while minimizing some kind of costs, sorting something most effectively, ...
Another thing which I think is very important is switching perspectives. Because even when you develop a program completely by yourself, that means you know everything happening there, you must know that there are scopes and that an object, whatever it is, doesn't know everything happening. So you need to give it the information it needs, you need to think about how the information changes, how to assure that changes get everywhere where there are needed (referencing correctly).
Another key skill, which I cannot surely say that I already learned it as I am only starting my career is getting out from the microcosmos of solving problems in one programming language to developing whole software, which will need more than one programming language, additional software etc.
create checklist on the tiny part helps a lot, it helps you to not get overwhelm by how big the project is, and its really help you track how much you've done
I thank you a lot for everything you teach, I am in my beginnings as a self-taught software developer and by putting into practice what you say I see that it works and gives me confidence to continue without fear. THANK YOU A LOT! see you soon!!
2:42 it is possible to create Gold from other elements in a lab(using nuclear fusion or fission) but you get only small amounts, its extremly expensive and the gold is would be radioactive for a few hundred years.
I started as a software tester with no experience and now 4 years later I am a developer in the same company and I fully agree with you.
When fixing a bug, or adding something to a feature more often then not I spend 80% of the time thinking and studying and 20% writing and testing the changes.
Also on the todo list challenge when I first started I would think in the terms of checkbox and layout.
Now I would start by drawing a user flow and discussing with myself if a single item should be a record in a related database or a json object. (I would now vote for the seccond)
"need people to connect" made me chuckle , facebook is a giant cess pool. So glad i havent used that in years. Solid video
I've always thought logically about many things. So computers were perfect for me long ago, since I always take things apart in my head. My problem is with programming, is I didn't know where to start. After 30+ years of living after childhood, I think I got it. So it's videos like these that help reinforce how it works. Building blocks help build a program.
This was gold. You combined the elements of thinking like a programmer and made gold. Not impossible after all! Subscribed.
Great analogy with science behind the scenes. If you do learn syntax of programming language, its the same as learning periodic chemicals table. Its good to know it, but solely knowing every piece good enough won't tell you alone what to do with that. And thats where methodic thinking and problem solving comes to life. Without them - you are destined to be an executor-only, which will sooner or later be too short.
It is true, not memorization, but application and practicing the concepts. Thank you.
Its a combination of things:
* solving the problem at hand
* being able to translate this problem into a mental model
* coming up with a solution using this model that solves what you're trying to achieve
* knowing how to express this solution using the programming language at hand
* knowing the tools to use in order to write the solution in the programming language
So if you just focus on the tools or the language you will be stuck. The key is the point of taking a solution and being able to translate that and express it in language X.
this is very funny to me because I'm a chemical engineer and and self teaching to become a web developer so the analogy of chemistry is perfect 🤣
I've been programming for decades so I thought I could just chip in with a small tip. Don't know how I ended up here exactly but anyway.
First, realise that no one can make something good when they don't understand the problem space. If you never worked on a certain type of problem before, you are a beginner in that area, no matter how many years you have programmed. Don't fall for the RUclips videos where people write perfect code from scratch on hard problems, that never happens and you have no idea how long they spent working on that code before making the video. My work method in these cases are as follows:
1. Make it work
2. Make it better
3. Repeat
It's important to as quickly as possible get something working. It doesn't matter if it's complete crap. When you reached that point you understand the problem better, what you can improve, what you need to rewrite or discard to solve the problem better. Then repeat that process until you're satisfied with the solution. Experience makes the process easier of course and what constitutes a hard problem, but what never works is just thinking about how to solve a problem, that's part of it but until you have something working you don't know.
I agree
It's exactly how I approach programming. Been doing it for over 10 years, and found that my first "draft" is always messy, but it works and it really helps me think about the problem from different angles. Then polishing comes in, until I'm happy with the final result.
Bugs are what i wish i knew more about. Bugs in the begining, brought down the whole project. Now, i can fix most of them. But there is anywhere from days to years fixing them. Right now im trying to track down a double free that is probably caused by usage of library code.
Good vid, but, the “secret sauce” CS grads learn is: data structures, algos & assembly. Especially assembly... reference Plato’s ladder of knowledge if you don’t get what I mean.
As an entry level programmer, I always had that "where to start" feeling, but as soon as I begin to code, then it hit me, every single time. That I had to decompose things and start again.
These are all good points. I do these things constantly, but I do something additionally. Trial and error is a great tool, breaking down problems is the core of problem solving, thinking algorithmically is a must. However, I always design code before I put my hand on the keyboard. Because I am disciplined and I understand data structures, runtime analysis, object oriented design patterns, model view controller, etc. I am able to learn and relearn syntax, new libraries, new languages, full stack development, etc. extremely quickly compared to others at my job. Code isn't difficult if you understand the principles behind computing that transcend all languages and software technologies. If you can design an algorithm or software system beforehand, you got it. Most people I have met (even those who code professionally) can't. Every problem, and sub problem, I write code for prompts me to think of multiple solutions. I pick and choose between their traits until I get the best of each, but at the core is knowing how to design and visualize each solution.
Where to start this approach , step by step. And grow up. ?
Do you tutor?
When it came to think algorithmically and you compared it to creating recipes, I went out of full screen to subscribe instantly. Then I realized I already had... :D
Great input Andy, helps a "young" programmer so much!
really needed this, because i am the same in the sense of learning basic syntax of c++ and understanding the basics but when it comes to creating programs i tend to struggle not knowing how to express myself in the IDE but when i look at tutorials that really makes sense to me
so i can read the code and understand it but cannot express it myself *yet*
so my logic is poor
is there any video of yours that talk about "problem solving" or "how to have better understanding of logic in programming"?
really appreciate the content!♥
I have the same problem...
@@sowianka9258 i know right. this is the point where most people give up but keep your head high, we shouldn't give up but get better and better
we are on the right path if we struggle
I had same problem learning javascript.
Just keep learning build projects google and read doc... Dont give up
@@amarimsirovic4472 thank you my friend
@@Asterite Many thanks for that! Thats true ,we need to keep going , dont loose the trust in ourselves and do what we love. I hope one day it will click :)
This is so good! I have worked with some very junior devs that really struggled on the last two points and…yeah. Those are super crucial
Loved the video. I really appreciate that point made about how to take the next step beyond the syntax of a language and begin solving problems. I’m currently at that point now with python.
I can definitely see how this would help me. I will now incorporate using a notebook to write my steps down and brainstorm before just diving in to the code and guessing on what to do. Thank you!
I've found new programmers don't have the mentality that they can actually fix bugs, especially difficult ones. They hit a roadblock and just stop.
Investigating the error messages and following the lead is all that is required to figure out what's wrong, but so many people just don't do this, they Google the output and if it's not on stack overflow they are completely stuck.
I was so guilty of this myself when I just started. Until I actually started reading the backtrace in error logs, reading the variable values (with xdebug) I was working with, I got like 3x times faster with solving problems
When I get some funky problem in my code. I some times panic and go shit! I'm going to have to restart... Then I throw away that panic and say "I will solve this problem". When I throw away that panic I start to think alot better. I was in the CSS and Javascript portion of my webpage and nothing was working. I went all the way back to the HTML and found the problem laid there..... Issue solved but it would never had happened if I didnt start breaking things down and looking at each brick I placed in my wall so to speak. I agree with this video 100 percent. Feels good when you solve something on your own.
Just found your channel Andy, love your videos!
Everything will be fine and you will shine like a rising star with great success and wealth
Somebody asked me what he should do to prepare to be a programmer. I told him to play chess and study math. I think those two skills learned as a child helped me to become a good programmer.
interesting answer - I don't quite agree that those skills would translate to programming, though. I would suggest knowing how to find out answers (ie. learning how to use Google) is much more important.
@@intheburrows Chess teaches you to think logically and visualize stuff. Math and most programming languages share a lot of symbols and teach you to think abstractly. Knowing how to use Google is definitely helpful, but I started programming long before the internet came out. Back then, we just had books that showed how a particular language was constructed.
Planning is the key, plan before you program, it's a massive time saver
Thanks for this video. I'm currently going through working on python. I"m coming up with problems I need to solve. I work as an editor and creative. I'm coming up with automation to help me organize the footage and rename files automatically to where I don't have to do things manually. I structured my naming conventions so that way when I run the automated scripts I don't run into problems.
Most of it makes sense.
However I believe that truly great programmers go beyond this, as they submerge themselves into the wish (not the problem) that lies underneath. And through analysis be able to see the consequences, opportunities and potential problems, and being able to discuss this with stakeholders (as they usually miss the finer details).
This thought process reminds me of the difference between handling and using an action figure and Lego models.
Great video! Was starting to get into programming as a teen, but unfortunately gave it up to pursue other fields of IT like network administration. Now that I have those goals out of the way, I've come back to learning how to program again for my cybersecurity goals and this provided some great insight! Subscribed and can't wait to watch more.
Thanks for the great vid. Looking forward to next ones
I would love to see you tackle a big problem and break it down out loud.
Willing to share your recipe with us? Sounds good,
When I was learning Node.js I turned on VSCode and started typing.
2 years later that doesn't cut it anymore. Today I crack open Word and write down the steps needed to solve the problem.
15 minutes of preplanning can save hours to days of rework.
to me it means to ditch emotions, and rely solely on logical thinking. Plan things out in your head or on paper so they make sense logically, try it, if it don't work then ask why and try to resolve it. I love programming cause I tend to me more emotional and when I program and think emotionally it lets me know instantly.
Applying the Backwards Law also helps: If you are stuck at some spot in your project, there's no use in forcing a solution as you are actively preventing it. However, backgrounding the entire thing to let your subconscious do the work and deliberately concentrate on something else to distract yourself from the problem at hand can work wonders: Instead of agonizing about it and eventually getting frustrated, you can relax by doing something else, and seemingly out of the blue a hint or even a solution to your problem pops up in your conscious mind.
@@Robidu1973 Interesting... like... walk away
You are the most honest software developer on RUclips thank you I watch your videos since 2019 thank you
The more coding you know, easier it is to think about the solution
i learned 11 programming languages over the years
and i dont write software.
mostly bcuz my ideas suck.
but lately i have been having good ideas and i am writing code again.
i became a cnc machinist to pay the bills.
i am a programmer in that for last 20 yrs tho.
Funny how I know all these things but doubt my skills, thinking I still haven't found that 'secret sauce'
Very relatable. I've even worked on a couple of projects and developed some "small" apps by myself. But still doubt my skills.
I’ve been working as a tutor for a few months and it’s made me realize that a lot of people do struggle to think like a programmer. My personal take is that it’s difficult for most people to think abstractly and that is why they struggle. Others do so more naturally, like in my case.
This, and other thing is often people have problems with understanding what they read and a ton of people who struggle to learn anything are just stressed