I spend so much time trying to understand the development ecosystem and fighting my way through the build tools and development frameworks that I can barely get to write a single line of code. Every problem I solve leads to the next roadblock and on and on and on. It's depressing me and I'm feeling like maybe I don't have what it takes to be a programmer.
[+] [-] rjknight|10 years ago|reply
I've been in situations where I've spent weeks or even months re-writing things because I read one more article about how some given approach is better than the one I was considering. Ultimately it doesn't matter enough to make a difference in the real world - your application will not be appreciably better because you used gulp instead of grunt or React + Redux instead of Backbone.
That doesn't mean that there isn't a difference between those things, or that some aren't better than others (I like React and would recommend it) but the choice of tooling is not your main problem[1]. This is going to sound very dull, but your best bet is to make some simple choices, stick with them for a while, and see how far you get. Try to avoid questioning things for a while, even if that feels really unnatural.
I think there's a kind of tooling FOMO that afflicts developers, where we get worried that if only we were using a particular tool or technique then our jobs would be, say, an order of magnitude easier, more successful etc. This is hardly ever true, and if it is true then you will be unlikely to be able to identify the choice you need to make until you've spent a good while building version 1 of your application anyway.
[1] https://xkcd.com/309/
[+] [-] jon_richards|10 years ago|reply
[+] [-] thom|10 years ago|reply
It sucks, but it doesn't end. Every once in a while you're be in a nice place where you're using familiar tools and libraries and doing familiar work, but every new project and technology brings potential new demands to feed the machine.
You can have a long, happy and prosperous career working with a single stack that someone has made work on your OS of choice, but if you don't enjoy feeding the machine, there is a ceiling on your flexibility and problem solving ability.
[+] [-] cesarbs|10 years ago|reply
That's what gets to me the most. I'm fairly confident in my problem solving abilities and coding skills. But I frequently lose all motivation to do good work when 80% of what I do is "feed the machine". There are times when doing it makes sense for the problem at hand, and then I feel motivated, but most of the time feeding the machine is about dealing with shitty code, bad documentation and unnecessary overengineering.
[+] [-] kohanz|10 years ago|reply
This phenomenon is one also of the biggest reasons people who set out to "learn to code" end up giving up.
[+] [-] metasean|10 years ago|reply
[+] [-] johansch|10 years ago|reply
Go simple. Pick a language. Start writing code. Stay focused. Only solve the problems that you need to solve, not any problems that you might maybe, perhaps, come across. Don't go shopping for a toolkit until you have tried building something yourself. Especially if you are young - remember that writing code to solve problems that someone else has already solved is not a lost cause; you are learning!
YAGNI: https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it
Remember, perfect is the enemy of good.
Today I think it's way too easy to get lost in the flood of of platforms/toolkits/frameworks. When I got started 20 years ago it was a lot simpler - crappier but simpler. :) You might or might not have what it takes to be a good developer - but I seriously see the risk of potentially good developers getting stuck before they learn how to navigate these new-fangled floods of ... stuff. It's like a tax on brain cycles to keep up with it all. If you have no discipline you will end up spending all of your cycles shopping toolkits rather than solving problems and learning how to actually program.
[+] [-] chipsy|10 years ago|reply
For this reason, projects run by a solo developer tend to use less tooling and process than team efforts; the friction introduced by each new step in the workflow is a major penalty. The solo developer can just opt to ignore all the cruft and use a cheap, lazy option, because there is no communication issue.
This also presents a bit of a dilemma if your goal is to learn a workflow in order to get hired on a team using that workflow, because you will feel like you are making nothing interesting or noteworthy. Your best option is to temporarily change your mindset from "engineer building software" to "writer building documentation".
The person documenting has to play detective and ask questions constantly. It takes them four times as long to do anything because they have to write down the steps and make it digestible. But each time they make progress and write down those steps, they set down a little roadway for people to drive over in the future. They also gain more credibility as an expert in the process.
[+] [-] joepvd|10 years ago|reply
Excellent suggestion. But also here, focus on a tool and/or workflow is warranted. Meandering the field is very productive; it has its time and place. But it is not a panacea for a deep dive. Sustained focus remains necessary.
Writing documentation can be a rewarding, productive, and, yes, even noble method for taking a deep dive.
[+] [-] hyuuu|10 years ago|reply
Personally, I would suggest, to go at it one at a time. The reason being, these "things" (build tools, frameworks, etc) are there to solve specific problems. If you don't have that problem, then you don't need to understand it, yet.
Pick a project and start building, you might find that you need one specific tool, which then you would use that specific tool or you might find yourself having trouble with a certain design then you use a framework that fits your model. This resonates well with @johansch comment. Over time, you will notice a pattern in your knowledge where jumping from one framework to the other is not that difficult because you are jumping from a higher board knowing the frameworks you already used, this applies generally.
Be depressed but don't give up, the joy comes when suddenly it all just clicks.
[+] [-] throwaway000020|10 years ago|reply
[+] [-] throwavay_java|10 years ago|reply
Just don't use them for this project. Just build the project using what you know now.
You can pick up that new tooling again at a later stage when you aren't so pressured to deliver something.
99% of being a successful programmer is coming back tomorrow, and getting a tiny bit more done, and learning a tiny bit more.
[+] [-] metasean|10 years ago|reply
Relevant Quotes (Sometimes these help me push through)
-----------------------------------------------------------------
> I have not failed. I've just found 10,000 ways that won't work. ~~ Thomas A. Edison
> A failure is not always a mistake, it may simply be the best one can do under the circumstances. The real mistake is to stop trying. ~~ B. F. Skinner
----------------
Actual Advice
----------------
Based on your question and comments, I'd actually suggest you reach out to your friends in the community who know more about the tools that you think you need. They might be able and willing to get you up and running with those tools, so that you can move forward.
For example, I'm fairly junior, but comfortable with testing once there's a framework in place. I've been through this enough that I've reached the point where I can get a basic Jasmine or Mocha framework up and running on my own, but recently ran into a problem where I needed more than a basic set-up. I mentioned it to a coworker and he said I needed Webpack. When I expressed concern about spending time learning and setting up Webpack, instead of working on my application code, he volunteered to get Webpack in place. As I learn more about Webpack, the process of setting it up for my next app should be less intimidating.
------------------
Other Thoughts
------------------
I love this meme - http://i.imgur.com/5mAUQj2.jpg - If you're a programmer, you've certainly experienced both states. While I think I run about a 1:1000 ratio, when I've spent a significant amount of time on the right, I try to remember the sensation of being on the left and I know that each mistake is one less mistake I can make and therefore moving me toward the left.
And one last, very relevant quote...
> Do not fear mistakes. You will know failure. Continue to reach out. ~~ Benjamin Franklin
[edited for formatting]
[+] [-] alex-|10 years ago|reply
Ultimately the times you are learning/improving the most are when you are facing many new challenges.
If you are anything like me, you may find trying to find ways to enjoy this time more helpful than trying to bypass or speedup this phase.
[+] [-] quicky123|10 years ago|reply
Well, it got built and it's been successful for its built purpose. The code isn't exactly pretty but it's fast and not buggy at all.
I spent the last year learning object oriented programming, software architecture, ui toolkits. I'm just starting with react, typescript, node, aws for my new app.
Because I built my first app 'the hard way' I now appreciate the value of these toolkits and frameworks and think they're worth taking the time to learn, but only if they simplify my process and not complicate it.
Keep working you'll get there and it's worth it!
[+] [-] qwertyuiop924|10 years ago|reply
EDIT: This is important, so I want to say it as clearly as possible. FUCK. ES. 2015. ES5 is actually pretty good. Learn prototypical inheritance, or just don't use OO. People have built real apps in ES5, you'll live. It might be hard at times, and you might have trouble learning, but the important thing is that you'll be writing code, not fixing your toolkit.
[+] [-] sergiotapia|10 years ago|reply
It's COHESIVE. You have an idea and want to work on it? It'll just work, no bullshit gluing together bits and pieces from other libraries. It's comes with realtime, javascript everywhere, documentation is on point.
I can guarantee it's going to restore your faith because you will spend most of your time writing your features and ideas, instead of glue work. Nobody likes glue work.
---
Where do I start? Right here: https://www.udemy.com/learn-meteorjs-by-building-10-real-wor... - you build ten real world apps, not some shitty task list garbage. I promise you won't regret it, it's -fun-. Like that first time you used Rails way back when? That kind of fun!
[+] [-] elros|10 years ago|reply
[+] [-] tlarkworthy|10 years ago|reply
[1] https://github.com/tylermcginnis/re-base
[2] http://yeoman.io/generators/
[3] https://maven-repository.com/archetypes
[+] [-] bonesinger|10 years ago|reply
[+] [-] wonnage|10 years ago|reply
So it's not just you. I would never set any of this up from scratch for a personal project. And I don't expect you'd need to, ever - established companies will have an existing pipeline (with its own problems you'd never learn externally), and new ones can just use one of the various boilerplate project templates.
[+] [-] 3pt14159|10 years ago|reply
[+] [-] dperalta|10 years ago|reply
Don't give up and keep learning!
[+] [-] erlich|10 years ago|reply
There is a proliferation of [boilerplate projects](https://github.com/xgrommx/awesome-redux#boilerplate) out there at the moment but they are quite heavy and all do things a little differently.
I think what is lacking and will emerge eventually is some glue to fill the gaps that everyone is identifying. I think it will be a few small core libraries with some conventions about project structure, toolchain, and modularity.
[+] [-] mod|10 years ago|reply
Use less-shiny stuff. Ditch the frameworks etc. Do the simplest thing.
[+] [-] throwaway000020|10 years ago|reply
[+] [-] brad0|10 years ago|reply
I'd say that what needs to change is your mentality.
There's a lot of things you can do to change how you're thinking. It all comes down to understanding the essence of why you're feeling this particular way.
What are you trying to achieve?
[+] [-] throwaway000020|10 years ago|reply
[+] [-] unknown|10 years ago|reply
[deleted]