Congratulations on already having an application in the app store. That is a huge accomplishment. Also the fact that you have realized your code wasn't perfectly designed is a really good sign.
My advice for you is to just keep writing those applications. Every single one you write will become a little bit better.
This will happen to you:
Either a bug will come up in your system or you will want to implement a new feature.
When you attempt to fix bug or add feature, everything will break, or you will notice that you are making tons of updates when it should have just been in one place. Each time you do this, you will learn and the next time you are developing a piece of code that follows a similar design pattern, you will know just what to do.
At the end of the day, experience is primarily all that separates the good developers from the bad.
One of my favorite books is The Pragmatic Programmer. https://toptalkedbooks.com/amzn/020161622X
Hope that helped!
I would definitely recommend The Pragmatic Programmer .
You could get books like: The Pragmatic Programmer or Code Complete which discusses a lot of best practices, theory and other important parts about programming... that WILL help you in the long run...
But realistically, you won't learn to actually program... until you actually program.
Troll ebay or walmart for a cheap laptop or a desktop. $200-300 should be able to get you something to program on.
Unless you've been seriously programming for a number of years, with a fair amount of that in teams, including face to face ones, you're probably not nearing your peak. I'd suggest reading The Pragmatic Programmer: From Journeyman to Master (http://www.amazon.com/The-Pragmatic-Programmer-Journeyman-Ma...) and judge where you are in the range from journeyman to master.
If you're looking for "lock-in", i.e. be easily employable past your ability to fake looking under 35, I'd suggest getting a job with a serious security clearance, which can be a trick, or specialize in one of the fields that respects grey hairs like embedded (but only so much depending on the sub-field, e.g. Detroit car companies at least in times past recruited heavily from Course 6 because they too got rid of their older EEs and programmers).
If you goal is to really work for yourself, and you think you can eventually bill at a rate 5-6 times the income you want to receive---maybe talk to some professors who make a lot of money on their one day a week dedicated to that, albeit they do it with MIT Professor on the CV---yes, that's a very good way to go. But hard for most people. See e.g. this comment https://news.ycombinator.com/item?id=9499561 which points out you have to compete on quality, not price, and a couple of HN contributors who've written a lot about that.
Medicine: in a county, or the developed "West", where people by and large don't directly pay for their own medical care, and those who do pay are looking at a rapidly graying population, well, it's a field you ought to run screaming from, unless it's your calling.
Don't know about MechE and so on, in general you need to talk to older engineers, the people who run the department, professors, etc., of course adjusting for selection bias. If you haven't already identified a calling, well, you have a lot of options, especially if you're strong at math. Especially before the 2008 crash, a lot of EE strong and therefore math strong EECS graduates would get initial jobs in finance with their proven math chops, which if they were smart got them in a good financial position to do something they really wanted to do later.
I also sent the following as advice to someone wanting to get into web dev:
"I was just thinking of 'easy ins' to the world of web development and a good source of information is http://news.ycombinator.com/ there's a lot of information from people who work in the world of tech startups and it's good information.
Also - if you are wanting to do php dev the key things to learn are:
Software engineering techniques and practice - object oriented development and abstract patterns are key to how to think about good development.
Database design and development (1st normal form, third normal form etc) Learn SQL. (SQL for dummies or similar is good for the basic commands and syntax etc.)
Stackoverflow.com - it's the best source of help for software development on the internet.
read books, the ones that come up again and again when people talk about learning to program:
also - look at github.com - that's where programmers keep their source code.
Learn about Object Oriented Programming, Design Patterns, MVC (which is a design pattern) is specifcally useful for web development.
That's my starter for ten - if you are interested in a career as a web programmer.
If you want to focus more on the html/css design side you could do worse than focusing on one CMS - such as wordpress and learning it inside out - you could then offer that to clients and it's a good way to provide web sites cheaply with very little effort."
This book seems to be a classic for programmers.
* Code Complete https://www.amazon.com/Code-Complete-Practical-Handbook-Cons...
* Programming Pearls https://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp...
* Pragmatic Programmer https://www.amazon.com/Pragmatic-Programmer-Journeyman-Maste...
Don't give up just yet, keep looking.
Do you have a portfolio? if not try to work on a project of your own so you can have something to show.
And if you are considering improving your java skills try work with libraries like:
With spare time I would also recommend you to read:
I can't speak of a specific book that is a comprehensive history of computing, but I will speak to books that speak of our culture, our myths, and our hero's.
Hackers and Painters , by Paul Graham. People are polarized about the man, whether he's too "pie in the sky" - full of shit and ego, or if he speaks as an ambassador to our most optimistic ideals of our (comp-sci) culture. The contents of this book is a collection of his essays that are inspirational. It made me forego the societal pressures within our culture and reject popular opinion because it is merely popular and just an opinion, which is a virtue no matter who you are, where you are, or what you do. All these essays are on his website, though. If you want to review them, I recommend Hackers and Painters (the essay), What You Can't Say, Why Nerds are Unpopular, and The Age of the Essay; his oldest essays are at the bottom of the page and go up - he writes about what he's thinking about or working on at the time, so you'll see the subject matter change over time. So much of this will have direct application to his middle school and high school life. I cannot recommend this book, and the rest of his essays, enough.
If he wants to get into programming, I recommend The Pragmatic Programmer . This book talks about the software development process. I'm not going to lie, I don't know when best to introduce this book to him. It's not a hard read whatsoever, but it's abstract. I read it in college in my first months and said, "Ok," and put it down. Approaching the end of college and my first couple years in my profession, I would reread it ever 6 months. It's a kind of book that doesn't mean anything, really, without experience, without having to live it, when he has an obligation to his craft, his profession. I tell you about this one since you're asking about books to tell him, because this isn't something someone would normally come up across without being told about it.
The Cathedral and the Bazaar is a telling book about the cultural differences between the proprietary monoliths like Apple and Microsoft, and the Free and Open Source Software communities that back such popular software as Linux (the most popular operating system on the planet, running on all top 500 super computers, most server computers on the internet, and all Android phones) and Chrome(the worlds most popular web browser). Indeed, this book directly reflects the huge cultural battle that was duked out in the field, in the industry, and in the courts from the mid-90s and into the 2000s. It advocates helping the community, contributing to something larger than yourself, and that none of us are as good as all of us. To paraphrase Linus Torvalds(inventor of Linux) "Given enough eyeballs, all bugs are shallow."
It's important to know who the hero's are in our culture, and they are diverse and varied, they're not just computer scientists, but mathematicians, physicists, philosophers, science fiction writers, and more. I would find a good book on Nicola Tesla, since he invented basically everything anyway (Thomas Edison was a great businessman, but a bit of a tosser), Richard Feynman was a physicist who is still celebrated in his field, and he even worked for Thinking Machines, back in the day, which was a marvel of it's time. Seymour Cray founded Cray Supercomputers and they have a lasting legacy in the field, a biography on that would be interesting. A biography on Symbolics and their Lisp Machines will make him yearn to find one still functioning (a rare gem that crops up every now and again, though he can run one in an emulator), and about the "AI Winter", a significant historic era (note: the AI Winter is over, and we are in spring, the history is both compelling and enthralling). Anything Issac Asimov published (in nearly every category of the dewy decimal system) is also compelling, and hardly dated. In fact, he's the originator of a lot of modern sci-fi. Charles Babbage invented the modern computer (though it was entirely mechanical in his day, and it wasn't actually built until 1996-2002) and Ada Lovelace was the worlds first computer programmer. A woman! Speaking of women, and it's worth young men learning this about our history, Grace Hopper was a military computer engineer who invented the term "bug".
And speaking of women, someone I have respect for, especially if your boy wants to get into game development is Sheri Graner Ray's Gender Inclusive Game Design , which may be more appropriate when he's in high school, and I consider it required reading for anyone who wants to enter the gaming industry. The book lays out plainly how video games hyper-sexualize both women, and, for some reason surprisingly to many - men, it's disastrous effects it has for the game industry, the game market, and the gaming community, and insights on how we may combat it. I have seen colleagues (men) become indignant and personally offended at reading this book, but were absolutely humbled when they took the fight to Sheri directly (we had a few phone interviews with her, always fantastic). If your boy found a problem with this book, he would do well to read Paul Grahams essay on keeping his identity small... The subject matter is not a personal attack on the individual, but on the blight, and he would be better served finding himself on the right side of history with this one, it would serve him well if he were to pursue this craft, specifically, but also any forward facing media in general.
And I also recommend some good books on math. Algebra, linear algebra, calculus, and statistics. You can get very far, lead an entire career unto retirement without knowing anything more than arithmetic and basic, basic algebra, but he could only serve himself well if he makes the decision that he is going to like maths and chooses to willfully become good at it. Outside the context of school and terrible teachers, it's actually an enthralling subject. Just get him a copy of Flatland, Flatterland, and Sphereland. Try this , the book is the narrative of some witty laymen who discover a whole branch of mathematics from first principles, the surreal numbers, an extension of imaginary numbers. It's really quite good, but might keep him occupied for a couple years in high school.
I should stop here or I never will.
Yes. Read The Pragmatic Programmer by Andrew Hunt. This will take you from "script kiddie" status to "engineer" status, and will change your mindset from "I can hack things together" to "I can engineer a solution." It's not hugely technical, but requires technical background to understand the context. I'd say it's a very appropriate guide on "how to think like a programmer."
There are two books I always recommend to anyone who is starting their Software Engineering career.
The Pragmatic Programmer: From Journeyman to Master
Clean Code: A Handbook of Agile Software Craftsmanship
Both of these books were recommended heavily to me when I joined the industry and I wish I would have read them sooner. They manage to boil down years of insight and experience into a couple of interesting and thought provoking reads. I always buy copies for my interns or college graduate level junior developers.
Also, don't be too embarrassed to ask questions of your co-workers. If someone makes a design decision and you don't know why, ask. Most developers don't mind answering questions if you frame it the right way. Always make it clear it's coming from a place of learning instead of a place where you are questioning their implementation and they will generally be happy to talk about it. The secret is, most developers love to talk about how smart they are. ;)
I would much rather have a junior developer working for me that is constantly inquisitive and shows they want to learn than a junior developer that says they can do something and a week later doesn't have anything to show for their time. Most developers I have worked with are reasonable and realize we all started not knowing how to do what we do. Not knowing something or being ignorant of something isn't a bad thing, we all have gaps in our knowledge. Being too stupid or proud to fix it though is a huge problem. You already recognize that there is a problem and are trying to fix it, that's half the battle right there.
To je čest anti-pattern, dovedu se fazani da održavaju stare projekte da bi stare iskusne kuke Pravile Novo. Keč je što su fazani po prirodi stvari nespremni za tako nešto. Zasuti nekoga ko je do tad radio samo na sintetičkim fakultetskim projektima gomilom real life legacyja je ... upitna praksa, ali nije ni skroz glupa pošto je to bitan deo realnog programerskog života. Kako kaže onaj kliše: "prvih 10 napisanih linija su greenfield projekat, sve preko je legacy kod". Sve što te ne ubije te jača. (F. Niče)
Ako nemaš živog mentora, ili ti je mentor go qrac, ovo je verovatno sledeći najbrži put do sledećeg nivoa: https://toptalkedbooks.com/amzn/020161622X
Knjiga jeste malo outdated po pitanju tehnologija, ali su principi i saveti odande svevremeni, dobri, i večiti.
First read this blog post about UI design. A codebase is a UI. It is the UI you use to get your job done.
It seems to me that the problem is that you don't have a good mental model of the codebase and its pieces. Part of this is that the codebase could be better structured. It always can be. But part of the problem is that it takes deliberate effort to build a clear mental model. It is easy to spend a bunch of time fruitlessly poking at things if you don't know how to spend that effort. So What is the shape of that deliberate effort?
It depends on the framework. If you're working on a Model-View-Controller "CRUD" app, you want to start by looking at the API interface: what paths/HTTP methods do what? The reference docs for your external stakeholder should say this. Then, you'll want to look at the models. Print out the structure.sql or all the models.py files and draw out a crows foot diagram. From there, look at the controllers/routes and tell the story of what they do. Use the automated tests as a guide.
If you're not doing a CRUD app, you want to find some advice that is shaped like it. What files to read first? What diagrams are useful to draw? etc.
> I also take a lot of notes and write down what people say, seems to have been helping
This is a pointer toward a different approach you can take to solving your problem. Make yourself a set of indexed notes that you can refer back to, as if you were studying for an exam.
1) In the course of writing the email, you make your question more coherent and by doing that, you stand a good chance of realizing the answer.
2) By writing down the questions, you can structure them in a way that makes them easier to answer. Given that your questions are likely complex and can have multiple parts, this is pretty impactful.
more on asking good questions
3) By writing down a coherent and contextful question, you show respect for the senior dev's time because you've put in your time to make your query well-structured.
4) You can go back and re-read the answer or the question. You can ask follow-up questions when you don't understand things. You can incorporate the answers into your set of notes.
Use a program like Anki to make flashcards about the framework. Make flashcards that ask questions about where things go and where you would put things. Also, make flashcards that ask you to explain why certain design decisions were made.
Find a good book to read and work through about the framework. Either ask on slack or ask your manager or go to the relevant subreddit. There is great value in personal recommendations.
Know that it is normal to still feel that you have lots to learn. This is a craft and you won't be done practicing it until you retire. For a broader look at the craft, take a look at The Pragmatic Programmer .
And of course make sure you are getting good sleep and taking care of your body.