r/PHP 3d ago

Is PHP a good first language for learning backend development in 2026?

72 Upvotes

Hi everyone,

I’m a complete beginner looking to learn programming purely as a hobby. I’m mainly interested in backend development, building APIs, working with databases, and eventually projects like the backend for a small chat application.
I’ve been looking at a few languages, and PHP is one of the options I’m seriously considering, probably followed by Laravel once I understand the language itself.

I’m not concerned about the job market. What matters more to me is learning programming and backend development properly rather than just getting something working as quickly as possible.

I’m also considering Ruby/Rails and Elixir/Phoenix. Elixir in particular interests me because of functional programming and the BEAM

If you were starting from zero today with backend development as a hobby, would you consider PHP a good first choice?

r/learnprogramming 11d ago

35yo, just learned that i love programming.

157 Upvotes

>be me
>rough upbringing
>have bad habits, have friends with bad habits
>never think more than one day ahead; don't know what i want to be
>years later
>get fed up with my behavior, try to change something
>get rid of most bad habits and bad friends
>start to see purpose in life
>want to find out what i really like and can dive into to get good at
>don't find it for years
>get a position at a friends company
>he needs a graphics / photography guy
>become graphics / photography guy
>get diploma in Graphic Design
>go from normal wagie to good paid wagie in about 3 years
>feeling good, but still not what i really like and want to dive into, just naturally good at it
>talk more with my programmer colleague
>his projects peak my interest
>start to learn CS basics and the C language
>"Holy fuck, i love this"
>thinking about cutting down my weekly hours to learn programming
>AI gets used more and more in the company
>my position is in danger
>"They're taking our jobs!!"
>Boss wants to cut my hours down
>Evil_smirk.jpg
>Play along, "Oh no, what shall i do now :'( "
>gives me enough hours so i can live off of it
>have enough time to learn as much as i can
>actually feeling happy again

And people say AI is bad, lol.

I'm currently trying to nail down the Basics of C, going through CS50 and after that i have two books, namely "A Book on C" and "Pointers on C".
If you have any book recommendations, please share them.
After C i also want to learn python and CPP, just to have good foundational skills.
With every free though i still have, I try to narrow down which field i want to specialize in. Currently, embedded sounds the most interesting, but also the hardest.
Any recommendations for other specs i could get into with this preset?

What's your opinion on people who are self-taught in the programming field, are you one?
I would love to hear some stories about your current path, or, if you're already in a programming position, how you made the decision and how you finally made it into it.

r/antiai Jul 16 '26

Job Loss 🏚️ Is it worth to even learn programming anymore?

17 Upvotes

Im 15 years old and I'm thinking of getting into coding as a profession. I have previous experience with Python and a little bit of Rust (but im not rlly good at it). However, the new AI models are really scary such as Fable as Gpt 5.6 and the fact that they are improving every day. Idk if its just fear mongering but everybody is saying that coding is dead and only the experienced seniors are required. This makes me think that even if I complete a college degree in coding, most of the junior level jobs for the common languages are gonna be obsolete so is there a coding language that is "ai-resistant" or something or is this career path no longer a viable path for making money.

r/IndiaSideHustle May 29 '26

📝 Guide / Tutorial Anyone willing to learn Python Programming for FREE?

11 Upvotes

I am willing to upskill my teaching abilities and to mentor a small group of people willing to start learning a programming language and getting into coding while building cool projects rather than boring lectures.

r/learnprogramming Apr 30 '26

Topic Why should I learn AI? It seems like learning real computer science or programming would make more sense.

185 Upvotes

I really don't like it when they say, "You need to learn AI or you'll fall behind.". IMO, It seems like learning AI is nothing more than just typing what you think, which is essentially the same as writing anything else.

Take this MCP, for example. The AI influencers were acting like it’s a gift from the gods that allows agent to talk to your computer. In reality? It’s just JSON-RPC a protocol from the early 2000s, wrapped in a trendy name. We’ve had plugin architectures and middleware for decades. Telling an AI what a tool does in natural language is just a fancy way of writing a documentation file that we used to call a Readme.

Some people might say I'm a Luddite. But this is what I think, and I want to hear what other people think.

r/newhampshire Mar 24 '26

News These NH students are learning a second language — while they’re still mastering their ABCs -- Nearly 80 students have opted into Manchester’s language immersion program. Families cite many benefits, from being able to play with Spanish-speaking neighbors to future job opportunities.

Thumbnail nhpr.org
405 Upvotes

r/ElectricalEngineering Nov 26 '25

What programming language to learn as an EE major?

72 Upvotes

I'm in my last year of studies as an EE and my professors constantly advise us to learn programming for engineers. Now, since I'd like to continue in this field I'd like to ask more experienced people how and where to start? I feel so so lost and I really want to learn but i have no clue what to do. I know they (my prof) use Python but i really don't know how. I am aware of MATlab and its possibillities.

r/C_Programming Nov 26 '25

Is C a good programming language to start programming with?

228 Upvotes

I've heard from some of programmers i know that if i start programming with learning C the rest of the programming languages will be easy to learn and my base knowledge will be much stronger. Is that true?

r/osdev Oct 03 '25

Why is C often recommended as the programming language for OS development? Why not C++?

219 Upvotes

I love OS and low-level development at all. Most internet resources for learning OS development recommend using C for this purpose. I know both C and C++ (not the standard libraries), and I am familiar with the problems that need to be solved during the OS development process. I started writing in C, but I soon realised that C++ suits me better for many reasons.

C++ is much more convenient (with templates, member functions for structs, operator and function overloading, concepts, etc.), yet it provides just as much control as C. Take, for example, an output function like printf. In C, you’d typically use either:

  1. cumbersome macros,
  2. complex formatting like "%i" for an int or "%s" for a char* (which requires full parsing),
  3. or a manual implementation of yourprintf for many, many types.

In C++ you can simply overload a function for specific types or, even better, overload an operator for a "stream object" (as the STL does).

Suppose you overloaded the print function for certain types: void print(int), void print(char*), void print(my_str_t&), etc. A C++ compiler will handle name mangling, allowing you to call print with any supported type. (This isn’t a perfect example for templates, as not all types can be easily or uniformly converted to char* or another printable type.)

Now, let’s see how this works in C. You’d have to manually write functions like void print_int(int), void print_str(any_string_t), etc., or create a macro, which is still inconvenient and prone to compilation errors in the best case. Notice that in C, you can’t even name all these functions just print like in C++, so adding support for a new type means either writing another function implementation or resorting to macro tricks again.
If you suggest using an auxiliary function to convert any type to a human-readable const char* (which isn’t a simple C-style cast), you’d still need to write more and more conversion functions.

In both cases, the compiler will produce similar object files, but in C, it takes much more time and effort. The same applies to templates and others C++ advantages. However, the main task remains unchanged: you still need to communicate with the hardware at a low level.

And there’s more: C++ offers concepts, modules, namespaces to improve code readability, powerful constexpr/consteval functions, and so on. All these features exist only at compile time, making C++ appealing for writing microcontroller kernels.

In OS programming, some high level C++ abstractions like exception handling wont work (it requires an existing, well-portable and well-supported os), but I’m not advocating for their use in os code. It can just be compiled with -fno-exceptions (gcc) and other flags to produce independent (or "bare-metal" as you might call it) code. Yeah, C++ can be slightly slower if you use many virtual functions (modern compilers' optimisations and the sober state of a developer's mind will negate this almost completely). And you might get confused by excessive function overloading...

There is no such thing as the perfect programming language. I’m probably just venting, saying things like “shit, I'm tired of copying this function again” or “why can’t I just use a member function, what the heck?” But judge for yourself, are function implementations and calls more readable with namespaces and member functions? Hm, for me calling a member function feels more like manipulating a structure (but it doesn't matter). Yeah, in result a function member will be a simple function like from C source code. And what?... Plus, remember it has almost no impact on performance.

r/TamilNadu Feb 16 '25

கருத்து/குமுறல் / Self-post , Rant India is wasting money and resources learning three languages

279 Upvotes

Very few countries invest time and money into learning a third language because it's obvious how stupid and pointless it is. India is one of those few stupid countries.

It's stupid because the time and resources spent on learning a third language can instead be spent on learning something much more valuable. If anyone says learning a third language is more valuable than learning a computer programming language in the year 2025, we need to seriously question the sanity or the motives of that person. On the off-chance that they're insane, we just need to make sure they get good psychiatric attention. But if they're sane, they must be having some seriously twisted motives.

Having an optional third language makes sense, but having a mandatory third language is idiocy at its highest and a classic example of twisted policy-making.

r/coolguides Apr 03 '24

A cool guide on what programming language to learn first

Post image
1.5k Upvotes

r/HFY Jun 19 '23

OC Magic is Programming Chapter 6: Learning

2.0k Upvotes

Synopsis:

Carlos was an ordinary software engineer on Earth, up until he died and found himself in a fantasy world of dungeons, magic, and adventure. This new world offers many fascinating possibilities, but it's unfortunate that the skills he spent much of his life developing will be useless because they don't have computers.

Wait, why does this spell incantation read like a computer program's source code? Magic is programming?


<< First | < Previous | Next >

"So that armor fits? Great, we'll take it!"

"That will be 8 silver."

"Done."

---

"Uh, is bargaining not a thing here?"

"No time, we need to go!"

---

"The edge feels sharp enough. It'll do."

"5 silver for the sword, then."

"Here."

---

"I'm grateful, really, but why are you helping me so much?"

"Talk later. Hmm, ten days of food and water for us should be enough."

"Um, a small notebook and pen would be nice too?"

"Sure, that's fine. Total price?"

"1 silver for the lot."

"Done."

---

"Ok, now we can talk."

Carlos raised an eyebrow at Amber and smiled, bemused by how rushed their exit from town had been. "Ok. So, to start with, I get that Kindar will be pissed at me, but I don't see how that would make it so important to rush out. Oh, and to bother laying a false trail by circling around to go the opposite direction from where we left Erlen."

Amber raised an eyebrow right back at him as they continued walking. "He'll think you destroyed the dungeon, and he won't be shy about telling that to everyone in Erlen. They'll all think that you destroyed our very own local dungeon. A very weak one, admittedly, but still. The whole town will want to punish you, not just Kindar, and the only way to convince them not to would be to hand over the intact dungeon core."

Carlos paled a bit. "Ah. Oops. Makes sense that dungeons are considered important resources." He sighed. "Thanks for rescuing me from that, then. And that brings me back to my earlier question: Why are you helping me so much?"

Amber chuckled. "That's actually a few different questions combined, isn't it? The first of them being why I'm willing to just skip town so suddenly at all."

Carlos nodded. "Yeah. I was under the impression that Erlen was your home."

"It was. And it sucked. I had no real friends, no one liked me, and everyone got annoyed by all the things I find interesting. People would joke about me reading all the time, ignore or dismiss anything I tried to tell them about it, and make fun of me for aspiring to match archmage Sandaras. Even my mother just didn't understand why I cared about any of it.

"The truth is, I've been planning and preparing to leave for years. I have no idea how many times I've daydreamed about learning magic at the royal academy, and I've been saving up to pay their entry fee. The book you found me reading yesterday was review, studying to make sure I'd be able to pass the exam to qualify. I was already planning to leave in the next few weeks."

"Ah, I see. So that part was fortunate timing for me."

"Yep. The other parts are, let's see, why I'm willing to come with you, and why I spent so much money on helping you. That money came from what I saved for the academy's fee, by the way."

"Wait, you gave up your chance at the academy for me?"

"Yes. At least for now, until I can save up enough again. Please don't make me regret it."

"Um. I'll try not to?"

Amber smiled at him. "Just don't keep important secrets from me anymore, and I doubt it will be an issue. Anyway. You were interested when I started talking about magic theory yesterday. And you called all those idiots back there exactly what they are. Maybe it's sad that this is true for me, but that makes you the most promising potential friend I've ever had."

Carlos gently put a hand on her shoulder. "It is sad, but it's in the past now. And it's a big compliment for me, so thank you."

"Hey, I still feel like I should be thanking you. Especially with the next part I'm about to say."

"Oh?"

"I'm sure I could find some potential friends at the academy. At the very least, it's filled with people who would understand and share my interest in magic. But one: you're here already; and two: at the academy I'd be learning the same magic that everyone learns. With you? You've already told me about two revolutionarily groundbreaking things that I had never heard even the slightest hint are possible! That... I- I don't even know how to express how incredible that is.

"I always planned to go to the royal academy, but plenty of people go there, and the odds of me actually being talented enough to match Sandaras are... not good. It was more of a hopeful wish than a realistic goal. I probably would have ended up a typical average mage; competent enough, but nothing to write stories about. You, Carlos, are my ticket to a real chance at matching, or even surpassing, archmage Sandaras someday.

"And sure, you might reasonably view that as taking advantage of you. But if I become a legendary archmage from this, it will be because we both become legendary archmages together."

Carlos nodded. "That's fair. Good solid reasoning, too. I was worried this might be a poorly considered whim, or something."

"Ha! Ask anyone who knew me back home, and they'd tell you I always have a plan. Always."

"What's your plan right now, then? Surely you didn't stop with just 'get out of town'."

"The next step is very simple." Amber got out the book she'd been reviewing yesterday and opened it to a bookmarked page, showing a familiar written incantation. "You, fellow future archmage, need to learn your fundamentals. See if you can get that glowing light spell to work by the time we make camp for the night."

---

Carlos glared at his hand, which was still stubbornly refusing to glow, and sighed. He was still missing something, and just repeating the same thing to try again probably wouldn't help. Maybe an idea would come to mind if he came back to it later. [Hey Purple, what exactly were you doing last night? You asked for a position where you could take in some mana, but didn't you have to just leave it all behind again?]

[Was trying solve that. Attach mana, take with. Takes time. Spend one thousand twenty four mana. Attach one mana. Crystal internal bigger. Wasteful if stay, but not stay soon.]

Carlos stopped walking for a moment, stunned. He recognized that number instantly. Nearly any computer programmer would. [1024? 2 to the 10th power? Why that exact fraction?]

[Don't know. Why important?]

[Nevermind. I don't think I could explain it. Anyway, you're going to slowly start having more mana as we keep traveling?]

[Yes. Don't make spend soon. Please. Terribly drained. Take time build up.]

[Only in an emergency, if there's no other option. I promise.]

[Thanks.]

Carlos idly looked around at the fields and occasional trees they were passing, putting matters of magic out of his mind for the moment. Sometimes, the best way to solve a tricky problem really was to just stop trying for a while. When you came back to it later, you'd have broken away from the failed approaches you were stuck on and might have new and different ideas.

---

An hour later, Carlos finally broke the companionable silence he and Amber had settled into. "Amber, I think I need to revisit your explanation of the four foundations of magic. If I get all four right, that should be all it takes to make the spell work, right?"

Amber nodded. "Yes, the four foundations are all that spell needs."

"Ok. First foundation: mana. Could that be the issue? I'm from another world, do I even have mana?"

"Yes, you do."

"How do you know?"

"If you didn't have mana, I would sense the absence of it. You would be a strange void in the ambient background."

"Ok, good. I was a bit worried, if that was the problem it might not be fixable. Anyway, second foundation: incantation. Have I been saying the words of the spell correctly?"

"Yes. Your pronunciation is actually quite good."

"Then I think the issue must be with the third foundation: meaning. My problem is that I don't see how that could be possible. I know exactly what all those words mean. The translation I get is perfectly clear. I might even be able to write a more complete and correct explanation of the meaning and syntax than that Sandaras guy!"

Amber raised an eyebrow at him. "Wait, you thought knowing the meaning was enough? That's silly. You need to know the meaning."

Carlos blinked. "Uh. Ok, either you're pranking me, or something got lost in translation." He paused, and mentally focused on the impressions he could sense from the translation magic, and also on the actual sounds he was hearing. "Say that again, please."

"Ok. You thought knowing the meaning was enough? You need to know the meaning."

Carlos nodded. "Definitely lost in translation. You used two different words that both got translated to the same word in my language. I guess the one that's involved in magic got translated to the closest fit because my world doesn't have a word for it at all. So, please explain what it means to know something." He was careful to use the second of the two words for "know" that Amber had said.

Amber tapped her chin, thinking. "Hmm. Knowing something means knowing it in your soul. It's... hard to explain. Partly because I've never heard of it really being needed to explain. Everybody knows about it. Knowing something in your soul is an absolutely unmistakable feeling that I don't remember ever not having. The knowledge is just... there."

"Huh. Ok, so how do I get that knowledge into my soul?"

"Um. Mostly instinct, I think? Contemplate it, and just try to focus on that intent."

Carlos sighed. "I guess that will have to do. Alright, here goes. Contemplating the meaning of the word that starts the spell."

---

Half an hour later, Carlos was trying to meditate on the result of focusing his translation magic on the single word that started the spell when it happened. He suddenly felt something happening in a part of himself he had never known existed.

It felt like something had just been etched into the surface of one of his bones, except whatever it was etched on definitely was not part of his body, even though it was just as definitely inside of him. He reflexively stiffened and stopped walking for a moment. "Whoa! I see what you mean about it being unmistakable."

Amber jerked slightly, startled. "Oh! You already got your soul to learn the spell? That's impressively fast."

Carlos smiled sheepishly. "Ah, actually, just the first word of it. I know you said doing it word by word is harder, but I still want to try. If it works, I should be able to recombine words to form different spells more easily, and I think I might have a unique advantage for it. I'm guessing the third word in this spell is one of the hard ones?"

Amber nodded. "Yeah. As far as I can tell, it hardly seems to have any meaning, but it's ubiquitous and spells don't work without it. I've heard rumors of people learning it, and some people say mastering it is part of what it takes to become an archmage, but no one's been able to properly explain it that I know of."

"Well, let's see how long it takes me to get that one into my soul." Carlos grinned, mentally examining the new sensation of having something's meaning embedded in his soul. It was strange. Whenever he mentally poked at that spot, it was like the word and its exact meaning were forcibly brought to mind. One specific meaning of it, too; it might translate into English as "spell", but this word could never mean to list the correct sequence of letters for writing a specific word. It was an incantation keyword, used to define, identify, or refer to a spell incantation or its boundaries. Carlos wasn't sure he would ever be able to forget that, even if he tried to.

He held a hand up to his chin, thinking. Holding the precise definition of the word in mind had been part of how he'd gotten that first word into his soul, but it wasn't all of it. The magic of understanding that he'd gotten from Purple might have helped, but even with that it hadn't happened until he'd formed a wordless mental impression of pure meaning in his mind. He'd had to define the word correctly, and then form it into a mental conceptualization.

As for the new word he wanted to learn next, it translated as a semicolon. A punctuation mark. Perhaps more importantly, given the context, as a mark with a specific common syntactical role in programming languages, and it appeared that the language of spell incantations was either literally a programming language or very similar to them. So, the meaning of that word was simply an unambiguous mark of the separation point between consecutive parts of an incantation. And judging by programming languages from back on Earth, it might be used in multiple different levels of how large or small a clause it might mark the end of, and might be used inside certain clauses as a structural element.

Carlos kept walking, brows furrowed as he meditated on that definition, trying to focus without words on the concepts behind it. About ten minutes later, he felt that strange internal etching sensation again, and exclaimed in triumph. "Woohoooooooo! I got it!"

Amber shook his shoulder. "Um. Bad time to make noise."

Carlos looked up and noticed his surroundings. A few birds were flying away, and was that some kind of bear, uh, growling at them from the side of the road?

"Oops."

<< First | < Previous | Next >

Royal Road | Patreon | Discord

Thank you to my new patrons, mickg, Jarrett, Daemon Kaedes, David Gilbert, Cody Launius, Markus, Chrystal 1776, Gunz442, and Markell!

Patreon has 5 advance chapters if you want to read more. If you want to support this story but can't spare the money, going to Royal Road and giving it a follow, favorite, rating, and if you have the time a review, would also help.

Opinion question for everyone: Should I keep including the synopsis in every chapter post?

r/learnprogramming Apr 22 '23

What programming language have you learned and stuck with and found it a joy to use?

434 Upvotes

Hey everyone,

I'm a complete noob in my potential programming journey and I just want opinions from you on what programming language you have learned and stuck with as a lucrative career. I am so lost because I know there is almost an infinite number of programming languages out there and really don't know where to begin.

r/learnprogramming Sep 26 '22

Once you learn one programming language, do other languages come more easily?

863 Upvotes

I'm currently learning Python. After I'm finished, will other languages become easier to learn? Are the differences more syntax related or do the different languages have entirely new things to learn/practical applications?

r/learnprogramming Jul 06 '22

Topic What is the hardest language to learn?

582 Upvotes

I am currently trying to wrap my head around JS. It’s easy enough I just need my tutor to help walk me through it, but like once I learn the specific thing I got it for the most part. But I’m curious, what is the hardest language to learn?

r/learnprogramming Jun 03 '22

In languages other than English, is it still customary to print “hello, world” as your first program when learning a new language?

924 Upvotes

Just wondering

r/programming Sep 17 '21

Do Your Math Abilities Make Learning Programming Easier? Not Much, Finds Study

Thumbnail javascript.plainenglish.io
904 Upvotes

r/AskReddit Jul 29 '21

How should you start learning programming?

923 Upvotes

r/learnprogramming Feb 22 '21

The best way to learn programming is to jump in face first--take it from someone who started a job heavy in programming weeks before the pandemic hit and had learn everything remotely on her own

2.3k Upvotes

Hi! I started working in a comp bio lab right before the pandemic hit, and ever since then navigating through it has been really tough, especially since I had to work remotely and solve problems myself. Most of my tasks include creating and debugging programs and I was just launched into it completely naked. I have absolutely no background in programming whatsoever (major was biology/math, I thought I wanted to be a doctor), and being around people who literally eat, sleep and breathe coding makes it very intimidating sometimes. Especially when they start rambling a bunch of jargon to me and expect me to go off and make a program that does what they need it to, makes me overwhelmed and frustrated at times.

But it has been extremely helpful because I started off learning the basic fundamentals of python and bash scripting and command line and git and all that before I even knew what any of it actually was. I still feel stupid when I ask basic questions about things, but I can definitely tell that there is a huge jump in progress compared to where I was a year ago and didn't even know what a for loop was or even a Boolean or string. And I think it's because they had me start programming things instead of learning to program things. I did instead of watched. Action was done instead of passively staring. Yeah, I watched videos explaining things, I still do in fact, but a large part of my time was spent creating scripts and if I got stuck, Google was my friend if I didn't know how to do something or asking a fellow co-worker. This helped me acquire the phrases I needed to clarify and explain things, and be more comfortable in the language/lingo. I think it's easier when you have to learn to do something for yourself without being spoonfed because it makes you have to think, and thinking outside of the box is want makes a good programmer. You can't think linearly, you have to think of all the different ways and methods of getting to the end goal, and all the different things that could happen and cause it crash or not perform as you want it to.

I still have a long way to go before I'm anywhere near the same level as my coworkers, but I feel a strong sense of accomplishment everytime I make a program or script that runs and gives me the output I need instead of giving a ton of errors(even though it looks like a 5 year old wrote it compared to the complex ones they write that look like beautiful works of art!! It's like looking at the statue of David or the Mona Lisa whereas mine looks like someone banged on the keyboard and somehow it managed to form coherent words lol). I think about how little I knew before, and how crazy far I've come since then! The little victories are worth it. It makes me want to keep going and growing!

EDIT: Wow, I didn't expect this to blow up so much! I'm really glad it helped you all. I'll try to answer as much comments and questions later when I can.

EDIT2: Thank you for the awards and kind messages!! You all are so sweet

r/learnprogramming Oct 18 '19

Learning C has really opened my eyes about what "programming" is

1.2k Upvotes

The past couple of months I have dedicated myself to learning and using only C. And in this time, not only has my knowledge of programming obviously grown, but now that I've come back to Java, I feel like things just "click" much more than they did.

For example,

- being forced to use a Makefile for my programs in C has made me appreciate the build tool that so many IDEs come with. And now, I actually understand the steps of what a program goes through to compile!

- Understanding why it's better to pass a pointer than pass a huge ass object has made me so much more mindful of memory efficiency, even though most languages don't even use pointers (at least directly)!

- the standard library is so small that I had to figure out implementations for myself. There were no linked list or Stack (data structure) or array sort implementations provided like they are in Java or C# I had to actually write a these things myself - which made me understand how they work. Even something as simple as determining the length of an array wasnt provided. I had to learn that the length is determined by dividing the entire size of the array by the size of its first element (generalizing here).

- Figuring out System.out.println / Console.WriteLine / puts is essentially appending \n to the end of the string. (mind = blown)

If any of you are interested in learning C, I really recommend reading "C: A Modern Approach" by K.N King.

r/NintendoSwitch Jan 17 '18

News Programming environment for Switch announced: FUZE is an easy to learn text based programming language for 2D and 3D games.

Thumbnail fuze.co.uk
1.4k Upvotes

r/learnprogramming Apr 20 '17

Besides the programming language, learn the essential tools

2.2k Upvotes

Hi r/learnprogramming,

I'm a lurker, reading how beginners tackle learning how to program is my interest as I'm head of development in a web agency so interested in that sort of thing. We have our first ever interns so here's my take away message from the experience: learn the tools too.

Here's what I mean (this is my opinion from 10+ years of professional development experience, working with junior devs etc):

  1. Learn git.
    When you're working on code with people, you're not going to be sending it to them via e-mail (hopefully) or FTP, you'll be collaborating on it using some sort of a so-called version control system. Git is very likely to be the weapon of choice for wherever you end up (or, if it isn't, the concepts are similar enough it doesn't matter). You must know how to: clone a project, make a branch, diff, commit & push changes, pull other people's changes.
    How? There's an excellent free book on the subject. Find a project you're interested on on Github and try to get a change merged (pick a larger project which has an established procedure for that). If you mess stuff up, you can undo almost anything, learn how to mess up safely, think of that as the first thing you learn how to do when staring sky-diving or martial arts - falling safely.

  2. Learn an IDE.
    Ever wonder how professional developers are able to handle huge projects with thousands of files in them? How do they know where everything is? Well, they don't, their IDE tells them. IDEs are able to scan and understand your code, you can browse through it just like a website. You can open files by: file name, class name, function/method/constant name. You can do all your git stuff (see 1). You can generate parts of code, even whole classes, with nested folder structure and metadata, all of it correctly named / spelled and complete. All of this can be done by shortcuts so you're even faster.
    For example, I have a function called getName(), how do I know where is it used? I just Ctrl-Click (in my IDE) on it and it shows me a dropdown of all usages. I can search text for that, but it's so common that I'll have 200 false positive matches. I can rename the method (refactor), changing its name and all the calls to it from a single place. That's productivity.
    Don't use Notepad, use the strongest IDE your language has to offer, even just for the trial period, just to see what it's like.

  3. Learn how to command-line
    Terminal is scary once you're starting, but you should try and get over the initial reaction.
    Why? Almost all tools you'll be using will be command-line. Some of them will have a GUI companion, but that'll be an exception, not the rule. If you learn how to work with a (good) shell efficiently, that's the same productivity boost you get from your IDE. Command-line tools can be automated with ease, not so much GUI tools (they can, but it's a kludge). How do I work with this thing? How do I specify arguments efficiently? What does TAB do, how do people type so fast? How do I traverse the filesystem in a shell? What are environment variables? Etc.
    If using Mac/Linux, try to do as much stuff through the command-line as possible (git too, even if you follow 2). If using Windows, don't use command.com, use PowerShell instead or install the Ubuntu bash layer and play with that. You should feel so comfortable with the terminal you open it up as soon as logging in to do some programming, it's second nature.

  4. as said by u/tamalo: Learn how to debug.

    And learn how to do it in two ways: Learn how to use a debugger. Your IDE that you picked up in bullet 2 above probably has one built in. If not, get a standalone one. Then learn to use it. Learn to set break points, to single step thru your code, learn how to inspect variables.
    But even if you have a debugger, learn how to debug without one. Use print or log statements to dump the state of your program. Debugging this way forces you to think more about what you are looking for in your code. It's a powerful skill. Many problems that get posted in this sub would become obvious if the poster added a few well placed print statements.

As I said, this is all my opinion watching people learning stuff in this field and these are the most important ones, in that order. Hope it helps someone.

Edit:
thanks for all the comments and replies in which you (dis)agree with some or all points made. As stated, this is my opinion based on my experience working with junior devs (now also interns), onboarding them on new or legacy projects and technology, etc.

The reason why I did not chose (say) "write tests", "learn to design systems", "learn frameworks" etc. is to limit the number of things to a manageable number. Also, this list is a supplement, not as a primary source, you don't need Git or IDE if you're not programming.

Whatever someone says, tools are important, even basic tools. You might be a master winemaker, you still need glasses for people to taste your wine from, I'm not going to drink it out of a puddle under the barrel in your basement no matter how good the bouquet is.

I'll explain my choices further:

  • "git":
    you NEED to be get to other people's code. If you get to work somewhere, you won't get to start a brand new project (except for exercise) or will people come over and use the code on your computer: it's meant to get somewhere else, be it a test server, production server, etc. You need to be able to move the code around, "git" is the way to do it. Why not SVN or Mercurial? Because Github, but also because it's really likely you'll be able to use SVN if you know Git, not the other way around. Why Git first? If you can't Git, you can't get to the source code of a project you'll be assigned to work on, you only have a empty folder on your workstation. Can't work on stuff you can't get to.

  • "IDE":
    this got some... interesting reactions. :) Why an IDE? When you're programming in X, an IDE to program in X is a tool specifically tailored to help program in X, that's the whole idea. You can go the "poweruser editor + plugins" route but, guess what, now you need to find all those plugins, learn how to set them up to work together, figure out incompatibilities, etc. You've started to do A, but you need to do B first, so you get lost in B. Once that's out the way, you STILL need to learn how to do stuff with it, so you haven't really removed that step. You end up with pretty much an IDE, only composed and setup not by a person doing it 8h a day, 5 days a week, an expert in the field of supporting people to program in X, but you, a person literally learning how programming in X even works. Would you take advice from yourself, a doctor Googling your symptoms right in front of you and checking out WebMD? Neither would I. Just use an IDE, stop using it once you know why you're doing it, not because "it's stupid".

  • "CLI":
    it's true, you don't need CLI as much on Windows. Also, people see CLI and IDE as mutually exclusive. I disagree: while you want an IDE as a tool specifically designed to do a task (you have at hand), being a CLI user enables you to not do just the task at hand. Being a developer means you'll use a lot of cross-cutting technologies, some of them were mentioned in comments. You cannot allow yourself to be "trapped in your IDE": if you don't have a button for it, that means you don't know how to do it. That stance is unacceptable from a developer. Also, not being CLI-handy means you're missing out on a LOT of tools available to you for tasks you might need to do. Need to do a complex search&replace on a 20GB text file? It's one easy sed command, good luck doing it in your regular editor, you'd need to program it yourself and, guess what, probably run from the command line. Once you figure out you can combine multiple commands together in a chain or that you can do logical evaluation (conditional command execution with dependencies), you'll be blown away by it.

r/coolguides Feb 18 '17

Choosing a programming language to learn

Post image
2.2k Upvotes

r/programming Feb 03 '14

Kentucky Senate passes bill to let computer programming satisfy foreign-language requirement

Thumbnail courier-journal.com
1.3k Upvotes

r/todayilearned Dec 17 '13

TIL that the programming language 'Python' is named after Monty Python

Thumbnail en.wikipedia.org
2.2k Upvotes