What can make the learning of programming more enjoyable and what kinds of language should I start from? Which types of websites can enrich my knowledge in the field of programming?
What makes it enjoyable?
For me what has made learning different programming languages enjoyable has been finding real world problems to solve, either for you personally or for someone else. For example, I built a web-based application that allowed me, for each meeting at work I had, log and track meeting actions until the were completed - it reminded me to chase people for their actions and track what I had asked others to do in a really neat format the worked for me! I loved it because it actually helped me save time in my day, get better at my job and stay on top of things, but more importantly use my skills to solve a real problem for myself. Why not try to build yourself an app. This could be great for interviews too to say you built yourself something to solve a problem you, or someone else, had.
Which languages first?
This is not an easy question to answer without knowing what kind of job / career you would like. There are so many programming languages out there that are designed for different things just look at this list (https://en.wikipedia.org/wiki/List_of_programming_languages) to get an idea of how many are out there. This site can give you an indication as to what programming languages are being used out there today (https://www.tiobe.com/tiobe-index) - it doesn't indicate the best languages being used, only how popular they are in terms of how much they are being used today.
Personally for me I started with languages that helped me build a web application which included these: each is used for a slightly different purpose on a website:
- Cascading Style Sheets (CSS)
I run an Apache web server (allows you to run websites) running from a Linux computer. I would recommend learning about these (Apache/Linux) too if you would like to get into web programming languages - you can set up a free account with Google Cloud Platform (GCP) or Amazon Web Services (AWS) to get started with Apache and Linux. The set up can get technical but there are guides out there to help and it is great to learn these too.
- https://www.w3schools.com - great free content on mainly web languages but has others too.
- https://www.udemy.com - great for free and paid courses for common programming languages
- https://www.computerscience.org/resources/computer-programming-languages - overview of some programming languages
- Youtube is a great source too for tutorials and research.
- You will need help at some point, everyone has questions. For help on programming there are online forums, you can post for free to a forum like https://stackoverflow.com help online!
Oliver recommends the following next steps:
It sounds like you’ve just gotten your feet wet in the great and vast world of programming, and you’re trying to figure out your next steps. As you have probably realized there’s a sea of options and opportunities for growth from here.
Start from the Beginning
If all the options feel overwhelming - it’s because they are. And that’s okay! If you feel this way then I would suggest your first task is to truly understand what about programming motivates you. Why do I want to keep learning how to program? What do I hope to achieve in 1 year? 3 years? Maybe 5? Once you have a good - not perfect - understanding of what you care about and why, then the options shrink in size and you attain clarity and purpose.
When you start from the beginning and be honest with yourself with these questions, you’ll start to uncover your passions and ideals that will inform what you should start learning and - once you’re a little farther along - what you should try building in the shorter term. For me the enjoyment and drive to learn programming came when I had goals and milestones set in my mind. Whether that was attempting to build a sales lead generator using TechCrunch’s API for making my work easier, or building a command-line multiplayer version of Monopoly for fun, having concrete and realistic end goals kept me in a sustained state of focus that kept me at my computer desk for hours and days :). Neither of these first projects were necessarily groundbreaking, but they were very useful for either my job or my fascination with learning itself.
The most important thing is to break things down. You should create small goals or achievements for yourself; checkpoints to mark progress in your journey of learning that will lead you to your longer term goals. This will hold you accountable and also keep you motivated as you’ll be able to see all the incremental progress you’ve made since you started - even if it feels like you’ve been stuck (and we’ve all been stuck. Learning to program is not easy), all the little goals you will have set and conquered will speak for themselves.
Find the Right Tools for the Job
In general the types of projects or work you’re interested in dictates your tools. The more specialized your type of project e.g. machine-learning, embedded-systems, AR/VR, the more specialized your tools. Does it make sense to select a Toyota Prius as your vehicle if you’re competing on a race track? You should generally view programming languages as tools, and different projects will determine which tools you want to select. But if you don’t have any specific types of projects/goals yet (and that’s okay - maybe you want to learn for the sake of learning) then I would suggest learning a general-purpose language.
As you learn the fundamentals and start building actual projects, you’ll be organically introduced to data-layer languages like MySQL and start deploying your projects using tools like Docker and AWS. But you can worry about these later. Make sure you nail the basics first!
Moving Forward and Getting Started
I entered the programming/software profession without a formal education in Computer Science. To say I was self-taught is somewhat inaccurate as I've benefited largely from the wealth of information, teachers and tutorials available on the internet. I would recommend finding a mix of academic, hands-on and project-based learning. You’ll ultimately want to figure out how you learn best, but I found doing a bit of everything was useful for how my brain works.
Here are some resources that I found useful as I learned how to program from scratch/understand computer science fundamentals:
CodeAcademy - Some critics don’t like the approach Codeacademy takes because it feels rote/spoon-fed. But there’s an undeniable physical element to programming that’s based on muscle memory and Codeacademy is good for this.
Coursera - Computer Fundamentals with Rice University - MOOCs are fantastic because they’re structured and can be interactive, and you’re getting information from either experts or seasoned professionals.
I enjoyed the classes in this Rice University MOOC because I learned fundamentals like data structures, iteration, control flow and more in an applied manner - and the weekly projects involved building various games, which combine all the concepts you learn into something relatable. But there are probably many more MOOCs out there today - Take a look at Udemy and Udacity for even more courses!
TheRealPython - If you’re sold on Python, this is a fantastic resource and blog on all things Python. It also includes tutorials and good explorations of Python libraries and best practices.
Codewars & CheckIO - Once you have learned the fundamentals of a programming language, websites such as these are good for challenging your understanding and skill. Problems are presented and your solutions must pass a rigorous set of test conditions.
You’ll learn that there’s almost always more than one way of doing things, and that having defined preset requirements helps ensure a quality solution. You can also see how other people’s solutions look like - further improving your perspective and understanding as a programmer.
And don’t forget to connect with the community! There’s a breadth of Meetup groups or Slack groups that might be focused on a particular language or programming stack where you can derive advice/feedback from.
I wish you the best of luck on your journey. Learning how to program can be difficult but it is extremely rewarding. Don't forget to have fun!
Christopher recommends the following next steps:
Great question! I am currently in Product Marketing but have been dabbling with coding for a couple years. I have experienced a similar challenge where I find it very interesting but have trouble keeping a habit. Here's what is working for me:
1) Find a project you want to work towards because having the end goal in mind makes it MUCH more enjoyable.
2) If you're looking at app development and Swift specifically, check out Swift Playgrounds by Apple. It's gamified which keeps it really engaging.
Hope that helps!
Coming to language choice, I would suggest C++ is a good language for college student. It gives you better understanding of computer science.
Get little hands-on on the programming languages to select language that interests you. What do you want to develop, web application, mobile app etc., the decision to select language depends of that.
Personally, my background is in C/C++. These two programming languages are the foundation for other popular languages employed in the tech industry right now and having a strong understanding of C and/or C++ will allow you to accelerate your learning of other languages that may be more popular in practice.
Best of luck in your programming endeavors!
There is also difference between programming and scripting. If you are more inclined towards scripting, Python would be a good choice to strart.
Learning programming is made more enjoyable by looking at problems and trying out different ways to tackle the problem.
To start, I would suggest the following:
Pushkaraj recommends the following next steps:
There have been some great answers here that I 100% agree with and will help you on your journey in web/software development!
One alternative that I'd like to add is to participate in a Hack-a-thon, which will allow to use your current skills in order to solve a relevant problem, and it will also provide an opportunity for you to learn new concepts as well!
If there are no local hackathons in your area, there are also events where participants can partake remotely. For example, NASA hosts the International Space Apps challenge on a yearly basis where people from around the world participate over the course of a weekend to solve problems that NASA is facing today.
Lastly, a hackathon event is also an opportunity for you to meet other fellow coders of all levels & backgrounds. You'll be able to exchange ideas and perhaps even meet people that can help you continue to develop a career in development!
I always tried to think about a daily problems/challenges to solve them or think about how can I improve features that I'm using on a specific tools/portals. The topics can be related to me or someone else.
As web site for reference: My favorite one is "w3schools.com"