How do you get a project funded?

Answer by Phil McKrakin:

It find it amazing with the explosion of startups in the popular media and now even a TV series about Silicon Valley, how so many people figure themselves to be the next Elon Musk or Steve Jobs.

I've got a vague idea, no team, no plan, no experience, who will give me money?

Well the answer is nobody.

To get money, (ok, money from me) you need:

1) A business plan that shows available market and financial viability.
2) A rough prototype of the idea that shows it is at least feasibly possible.
3) Some proof that shows you own the idea and its unique and defensible.
4) A detailed plan of how you are going to use my money.
5) A team of people that can build and scale the product to limited production.
6) Overflowing enthusiasm that leaves me without a doubt you will give your life to make this plan work.
7) Proof you've exhausted all your existing resources to get where you are today.
8) That hopefully, you and your team also have some experience of doing this before and you know what to expect.

What have you personally invested in this so far? For me to commit, I would want to see you have put every last resource at your disposal into making your idea real. Because if you dont, the 50 hungry guys behind you are going to run you over, tear you to shreds and spit you out, as they want it way more than you.

Why no demo? Whats stopping you? If you cant make it, why would I invest in you? If you need me to make it, why dont I just do it myself?

Have you and your friends quit your jobs and put your life savings into supporting yourselves while you research the market and learn everything possible about how successful startups succeed? Have you done any surveys with potential customers to find out if they would buy your solution and how much they would pay? Who is your competition? What is your edge/advantage?

If your unemployed, sat in your basement at home watching Oprah on TV, sucking on some cheerios while your parents clean your room and you suddenly think you have a great idea for a startup to get rich, congratulations! You and 10 million others just had the same inspirational idea, and just like you they wont get off their backsides to do anything about it.

Making a successful startup isnt kindergarten time, this is the olympics of business and for every winner there are dozens of dead bodies on the roadside.

If what you have is a really good idea, show me invoices proving how its made you a profit selling it in the last year. That was how businesses used to scale. You had to prove you had something viable. What a revolutionary concept!

Im not in the business of giving money away. There has to be something there. If a vague idea is all you have, a VC can just take your idea and maybe use it himself.

Even if you do find a sucker to back you, the valuation will be so minimal, you would likely never make any money.

Stop dreaming and do some work, show people you are commited to your idea and at least have a plan and something you can demo. Learn basic coding. If you can read and write, you can make a simple web site. It not difficult. Read some books or search Quora for details on what to do.

Simply having an idea is not enough. How many people said TV screens in the back of airplane seats was their idea?

End rant …

Here is an actual example of how you do it…
What is an optimal way of getting rich?

How do you get a project funded?

How do I transform myself from an average programmer with a CS degree to one of the best programmers in ten years?

Answer by Martin Ivancic:

  1. Find a mentor. If you're the most experienced programmer in the room, you're probably in the wrong room.
  2. Learn to love puzzles, and the frustration that that they bring. The bigger the frustration, the bigger the joy of solving it will be.
  3. When you can, don't solve problems that you know how to solve, rather, push yourself into the unknown. Trust me, nothing interesting ever happens in the comfort zone.
  4. Be humble. Realize that your knowledge is limited, and never let go of that realization.
  5. Don't fall in love with that one special programming language, and then defend it's supposed superiority in every available forum. You will only end up broken hearted.
  6. Don't go into programming for money. You are a decade too late for that. Money is a side benefit, it's the growth that matters.
  7. Exercise. Just do it.
  8. Be sure to get enough sleep. If you manage to achieve that, be sure to let me know how you did it.
  9. Try to avoid caffeine addiction.
  10. Have fun.

How do I transform myself from an average programmer with a CS degree to one of the best programmers in ten years?

What are the greatest programming tips and tricks you have learned on your own by years of coding?

Answer by Jerome Terry:

I can't really claim I've learned the following lessons on my own. As the famous Newton quote goes "standing on the shoulders of giants".

I've learned these lessons by hard work, and reading everything I could get my hands on over the course of the last 17 years – 5 years of university, 12 years programming.

These lessons have served me well. Hopefully they are helpful to you as they are to me.

Iterate. Successive refinement is how we get to great code and great products.

Simpler is usually better. Watch Rich Hickey's talk Simple Made Easy, and read Kent Beck's Xp Simplicity Rules.

Don't be clever. Simplicity, Clarity, Generality. Read "The Practice of Programming" by Brian Kernighan and Rob Pike. Speaking of Brian Kernighan, also read "The C Programming Language" by Brian Kernighan and Dennis Ritchie.

SRP and DRY principles go a long way towards clean code. Read "Clean Code" by Uncle Bob (Robert C. Martin)

You ain't gonna need it (YAGNI) applies most of the time. In general, just design for today's requirements, to prevent over engineering. Having said that, sometimes it's necessary to design for future growth. There's a balance – it's up to you to find it.

Code with obviously no bugs is immensely better than code with no obvious bugs.

Being able to reason about your code is paramount to high quality.

Requirements are rarely cast in stone. Question everything. You have the right to ask to have the requirements changed.

Start with why. Watch Simon Sinek's talk How great leaders inspire action

Clients don't really know what they want, and that includes your manager. It's your job to elicit their true needs.

Despite what process you follow, some amount of up front design is required – how much should be proportional to complexity. Read "Domain Driven Design" by Eric Evans.

Design patterns aren't used as much as you'd think. Recognizing common patterns is important. Don't treat patterns as a hammer looking for a nail. Read "Refactoring to Patterns" by Joshua Kerievsky.

SOLID principles are far more important than design patterns. Read Uncle Bob's article Principles Of OOD

Beware of dogma. There's usually more than one way of doing things. Best practice is overused.

No one has it all figured out. Some know more than others. Always try to be the worst member in the band. Read "The Passionate Programmer" by Chad Fowler.

There's no such thing as perfect. You can always be better. "The perfect is the enemy of the good" – Voltaire.

If you don't design for scalability, your code won't scale. If you don't design for security, your code won't be secure. Same applies for all -ilities.

You are not your code. Criticism of your code isn't a criticism of you.

Don't go dark. Share your unfinished work with others willingly. Read "Dynamics of Software Development" by Jim McCarthy

Test your work. Try writing tests before code. Try TDD. Try BDD. Read "Working Effectively with Legacy Code" by Michael Feathers.

Learn multiple paradigms. OOP, Functional, etc. Your OO code will improve after studying functional languages such as Haskell and Lisp.

Watch OOPSLA 97 Keynote by Alan Kay, "The Computer Revolution Hasn't Happened Yet".

Never stop learning. Read as many books as you can, but not only technical books. Read "Zen And The Art of Motorcycle Maintenance" by Robert M. Pirsig.

Read "The Pragmatic Programmer" by Andy Hunt and Dave Thomas.

Read "Code Complete 2" by Steve McConnell

Read SICP. Don't just read it cover to cover. Follow along with a Scheme environment (e.g. Racket) and actually write some code.

Don't ask permission to refactor, test, document etc. It's all part of "programming". Don't ask permission to do your job.

Care about your work. Care about your customers. The code we write allows the users of our code to get their shit done, without our software getting in their way.

Always ask "what problem am I trying to solve"?

In general, stick to solving one problem at a time. When you spot other problems, note them and come back to them later.

Be where you're at. This is a life lesson that applies to software development. When you commit to doing something, focus on doing it. When your washing the dishes focus on washing the dishes – forget all the things that stressed you out that day. If you are spending time with your family, be there – turn off your phone, forget that tough problem you've been wrestling with. When you're in a meeting, participate – focus on the conversation and forget about the work that's piled up. Read "Zen Mind, Beginner's Mind" by Shunryu Suzuki

SRP has broader applications than just to code.

"Premature optimization is the root of all evil" – Donald Knuth. Start with a brute force algorithm until you find a reason to change.

Ask "what's the simplest thing that can possibly work?" Read "eXtreme Programming Explained" by Kent Beck. First version is supposedly more extreme than the second.

Be OK with you. You will never know everything – that is impossible. Keep learning, but don't get caught up on what you don't know. Watch Kent Beck's talk Ease at Work

Be humble. Everyone is at different points of learning in their career. Help others on their path. Ask for help when you need it. Give back to the community. Watch Leon Gersing's talk "Truth, Myth and Reality in Software Development"

Multi-tasking is an illusion. Computers get away with it because they can context switch really fast (most of the time). Context switching for us mere mortals has a high cost. Do one thing at a time, and do it well.

9 women can't have a baby in a month. Read "The Mythical Man Month" by Fred Brooks.

There is no spoon

What are the greatest programming tips and tricks you have learned on your own by years of coding?

What should a person do when everything appears to be going wrong in their life?

Answer by Jay Bazzinotti:

I remember a day in the 1990s when I found myself looking at my computer and seeing I had just lost $280,000 in the stock market. That was pretty much all the money I had, and it was irrecoverable, With a shaking hand I turned my computer off, left work, and started driving. And driving. And driving. I had no direction. I just drove and as long as I drove I didn't have to think about all that lost money. Eventually I found myself in Mystic, Connecticut and I decided to stop in at Mystic Pizza and have a slice. I remember as soon as the hot cheese hit the roof of my mouth, the bubble burst and all those repressed feelings came flooding in.

"You fucking moron," I thought, "why did you buy that stock? Why didn't you sell it when it started to go down? Why are you so stupid? If only you'd have pulled out earlier! All that money… gone…. gone… gone…."

I almost puked up all the pizza. I was a wreck.

Later as I drove home, I realized a couple of things. The first was, I wasn't hungry and I wasn't going to be hungry. I had a good job and I would be getting paid next week. My mortgage was up to date. The money I lost was all about ego. It wasn't about my happiness or even my survival, at least not at that moment. I went home and thought about my life and not the money. After thinking about it for a long term, I decided the following:

1 Breathe – as Mr Miyagi says in "The Karate Kid", "No have breath, no have life". So keep breathing.

2. Have a big glass of water. When things are bad, water is cheap and it helps keep you healthy, and your health is your biggest asset. If you're already sick, water is one of the best medicines.

3. Go for a walk. Again, it's cheap. You don't even have to buy sneakers to walk. It clears your head, gets the blood flowing, helps your health. And the motion will give you the perception of action. You can't do everything but you can do something and this is a something you can do almost anytime, anywhere.

4. Forgive yourself. You're going to be stuck with yourself for a long, long time. So say you are sorry for the actions that made you fail or for the circumstance of failure and never, ever, ever say, "You're a moron, you idiot, you jerk" etc. You wouldn't tolerate being called names by someone else, why would you do it to yourself? Never, ever, ever cut yourself down. And the word sorry doesn't absolve you of responsibility – it's not magic. You have to resolve to learn from your mistakes and make restitution in some fashion. That means making a plan and taking positive action.

5) Forget about regret. Instead of saying "If only I (fill in the blank)" say instead, "Next time I will (fill in the blank)" You can't change a thing about the past – ever. So focus on improving your future life instead. Every single thing you do today is preparing you for the life you will live tomorrow.

6) Let the deluge wash over you and stand tall. A ship in a storm doesn't try to run from the storm. It turns into the waves and lets them wash over it. Sometimes those waves cause damage, but eventually they pass. When the shitstorm is coming, when the trouble comes, stand up tall, paste a smile on your face, and let it wash over you til it dissipates. Nothing good lasts forever and neither does anything bad and if it is bad, it's got to change. Remember: this too shall pass.

7) If you have to get angry, do it, but then get over it — and don't take your anger out on others or, god forbid, your hapless pets. Have a hissy fit, break a plate or two but when you wake up, move the hell on. It's over and too late to change the past.

8) Accept, accept, accept. Many people end up destroying their lives because they can't change the past and they can't get over the damage. You have to accept what has happened. Seriously, this may the most important of all the points (other than drinking some water). Sit back and just accept things as they are, not the way you wish them to be. Forget about silly notions like "fairness". The universe is inimical and doesn't care about poetic justice, or fairness, or right and wrong. Sometimes things happen just because. Get used to it.

9) Keep moving. As Churchill once said, "When you're going through hell, don't stop!". Sometimes motion is its own answer. Getting stuck in a rut or not moving at all is a big danger.If you do what you always did you will get what you always got, so keep moving and if that's not working, do something completely out of character for you, something random, something unexpected. You're scared? Good. If you aren't scared, you aren't trying hard enough or taking enough risks or learning something new. As Muhammed Ali said once, "Being knocked to the mat doesn't make you a failure, but staying down does. To be a champion, all you have to do is get up and fight for just one more round."

10) Let time do its healing. Everything heals. You will too.

So what did I do after losing all that money? I bought a vacation house. By doing that I scared myself into taking action and I also signalled to myself that success was still possible, that there was still hope. Not long after my disaster, I took another job. the new company got bought and I made millions.

What should a person do when everything appears to be going wrong in their life?

What should a 25-year-old, broke, and jobless person, with huge dreams do?

Answer by Rizwan Aseem:

"Ugly Truth Revealed! 25 Year Old Has Head Stuck Up His A$$!"

In recent news a 25 year old got fired from his job that in his own words was 'not the dream job…" The youth further iterated that this lay off was due to circumstantial reasons.

Though the youth was only partially delusional thinking the "ugly truth" in life was that he has to "evaluate whether he should follow his passion or find a job".

Missing out the real truth – that he has his head up his a$$.

                                                         – Report By Our Staff Correspondent.

The fact that you have been 'thinking' about the whole startup and calling yourself a want-repreneur should tell you that you're just f*&%ing around to avoid finding a job.

NEWS ALERT! Want-repreneur Is Someone Who Wants To Be An Entrepreneur But Doesn't Do Sh*t!

If you've got a passion in life – go out there and do it. You don't need anyone's permission. In fact, no one will give you permission. No one cares that you want to be an entrepreneur, EXCEPT YOU.

If you care – then go do it. But that's not all – let's take a look at all the questions you asked in this questions and figure out what you can do about your passion.

Read all the way through and I'll tell you some of the steps you can take to make your dream a reality. I'll give you the exact steps, but before that lets look at your questions…

A) Should I Keep Looking For A Job In Finance

The worst thing about starting a startup is that you need money – not just to fund the startup, but to fund yourself. If you don't have a job, you're stuck depending on your savings.

Savings run out really really fast. Startup grow really really slow. At least in the beginning. So look for a job, just so you don't have to spend your own cash to pay for your own lifestyle.

But How Will I Work On The Startups?

Typical office jobs are 9-5 weekends off. Even if you work late – because you work in finance, and have to commute for 2 hours everyday – you will still have 3 hours a day to your self.

Turn off the TV, stop watching Suits, and work on your startup in that 3 hours. Be hyper focused. Then dump the Friday night drinks with your friends and work on the weekend.

Work your ass off on the weekend to get the startup off the ground. Work 10 hours on Saturday and Sunday if you have to. That's 15 hours in the week, 20 hours on the weekend – and you've just put a full 35 hour work week on your startup.

While still getting paid on your finance job, and being able to pay rent and not have to eat Ramen Noodles all week.

B)  Have Some Decent Amount Of Cash And Then Take The Leap of Faith

Do you know how many startups fail? 95% – so the chances of your startup succeeding are 1 out of 20.

Since you got fired due to circumstantial reasons, I'm going to go out on a limb and say you're an unlucky guy.

If you take the leap of faith – you will lose your money. The parachute won't open and you'll be looking for a job in 6 months, with no money and desperation on your forehead.

Find the job – then work late nights, weekends, holidays even your lunch break on your startup to get it off the ground.

C) Find the First Decent Paying Job

Abso-frigging-lutely. Take the first decent paying job and then take it from there.

But take it from there means that you actually work on your startup. Don't talk about it. Don't tell your friends. Don't tell your family. Work on it.

Work your a$$ of on it. When your startup actually grow, you'll get the credit, your friends will come around, your family will be asking for their cut for supporting you, you will get the fame you want.

But until then if you tell them – you'll just end up looking like a fool if you fail. If you don't tell them, no one will know if you do fail. Success doesn't need a blow horn, people come knocking on the door anyway.

D) Start Over

Are you f*&%ing nuts… start over in another career, do another degree.

Look, what's wrong with this degree will be wrong with the next one, and the one after that.

Stop looking for excuses to run away from your dreams. Stop being a pussy, be a man and work towards your dreams.

Every house is built a brick at a time. So if you're thinking of creating the next Facebook – then write your first line of code.

Figure out the idea for your startup, and then take the first step. Register the domain, write the code, get a prototype made, sell to your first client.

Do something. 

Throw your hat in the ring, stop sitting on the sidelines.
E) Start Working Toward My Dreams, TODAY.

Hallelujah… Hallelujah… Hallelujah…

Now you're getting the point. Hell Yeah!!!

Get on with it and make waves in the world. Go out there and do things.

F) Stop F*&%ing Wasting Your Time

Now that you know what you have to do, go out there and do it. Don't waste your time thinking about it. The best thing you can do about your startup is to actually do something.

Here are a few steps that you can take today to actually start.

1. Write down what your startup will do.

2. Answer it in this form. I help _______ to do ________ by doing _________ without doing _______ in __________.

4. Fill in the blanks as follows.

Blank 1 = The market that you serve, the people who will buy your stuff
Blank 2 = The problem that you, your startup or your product solves. The results that they will get when they use this product
Blank 3 = The solution that solves the problem in blank 2
Blank 4 = The obstacles that the market's been facing so far
Blank 5 = The amount of time it will take for them to get results

5. Find 3 people in your target market and ask them to buy from you.

6. Ask them how much they would pay for this solution today.

7. Now that you know the target market, the product, the price point – go out and create a prototype. Even it it's really bad just make it and sell it to these 3 people.

8. Then use the feedback that you get from your customers and improve your product, marketing, and sales systems.

9. Finally, get up off your a$$ and do it. It's okay to fail a few times. But you have to get started to become successful.

A Few Things To Remember…

If you talk to your friends about your idea, you won't get started. They will tell you that your idea sucks, that no one would buy, or they will laugh at it. Don't believe them. You can do this.

If you talk to your family about your idea, you won't get started. They will tell you that you're too young, you don't have the experience to do a startup, that you are better with a job. Don't believe them. You can do this.

If you talk to any one else about your idea, you won't get started. They will tell you that you need to patent your idea, you need to get a ton of investment, that you need to spend years in development. Don't believe them. You can do this.

But to do this you have to get started. So go out there and start now.

Here's What You Do Next

Write down 10 things that you can do to help people today. Go ahead, pick up a pen or paper, or open a text document on your computer and write this down right now.

Don't read another answer – just write that down, then come back and post in the comments that you did it. That you got started. Go ahead and do that now.

What should a 25-year-old, broke, and jobless person, with huge dreams do?

What works the best when learning a new language?

Answer by Gruff Davies:

There is a trick to learning languages that can shorten the journey to fluency from decades to mere months. There's also something most teachers won't even tell students for fear they would never start, but in fact, is vital that you know.

In fact, there's not one trick but a whole suite of tricks to help you learn a language.  I'll use French as an example, but this advice applies to any language.

1. Understand the Language Learning Journey
Language learning has an appalling abandonment rate.  A mere 4% of students embarking on language courses in schools achieve a basic level of fluency after three years. 96% fail to achieve fluency and/or abandon courses completely!  People almost always wrongly conclude two things from this: Myth 1) Learning languages is hard, 2) Other people (but not them) are naturally good at languages.  One of the biggest reasons cited for abandoning is that students don't feel any sense of progression.  A GCSE student with an A* will visit France and find they can't even have a basic conversation.  People largely give up because they had the wrong expectations set.

Learning a language isn't hard.  It's just LONG.

I'm going to use a metaphor that I hope will help you get the knack.

I think of learning a language a bit like climbing a mountain (a large but easy mountain, the sort that anyone can climb so long as they keep going).

Here's what most teachers won't tell you: It takes 600+ hours of study to reach fluency in French (unless you already speak another latin-based language – a so-called romance language).  Think about this.  If (say) at school you learn 1 hour of French per week, then in forty weeks you'll do 40 hours.  You'll need fifteen years at that rate to become fluent, not counting all the stuff you forget because of the gaps between study.  (Harder languages like Russian or Mandarin can take 1,200 hours!

At the other extreme, if you study really intensively, you can rack up 40 hours in one week!  You can achieve fluency in ten to twelve weeks at that rate.  Most people don't have the spare time to give that level of intensity, but understanding the journey helps you be realistic about what you can achieve so you won't get demotivated.

2. Intensity is vital to learning a language quickly.
This is a double-whammy.  1) Immersing yourself as deeply as possible in the subject allows you to rack up the hours as quickly as possible. 2) Memory fades unless it's used. Low-intensity studies (i.e. school French) are ineffective because their intensity is so low that you end up forgetting a large percentage of what you learn.  So, try to learn as intensely as time will permit you to. 

To use my mountain metaphor, the ground is icy and slippery and if you go slowly, you'll slip back as much as you progress.  The faster you can climb, the less you will slip back.

3. Be kind to yourself
I've used sunlight in this mountain metaphor to give you an indication of how it feels to be at these levels. It's not until B1/B2 that the light comes out and it starts to feel really good speaking French.  That happens around the 350-400 hours mark if you've never learned a second language before. 

Expect a lot of fog and confusion for the first few hundred hours.  It's completely normal and you're not stupid.  EVERYONE feels this way, even the people who seem really gifted at languages.  The difference is, anyone who's already been through that and reached the sunlight expects this stage, and it doesn't phase them because they know they'll get there eventually.  So, if you catch yourself saying things like, "I'm rubbish at French" or "I'm stupid" just stop for a moment and remind yourself that you're neither and you will get it if you persevere.

4. Prepare for the journey
If you're a complete beginner I find it's really important to absorb the sounds of the language before beginning serious study.  I listen to hours of audio (audio books are great for this) without trying to understand the content, but still actively listening to the sounds of the language to embed them.  I usually find after a while I end up babbling them a little like a baby which can feel a bit silly . Which brings me my next piece of advice:

5. Practise looking stupid
Being self-conscious is your biggest enemy.  You cannot speak a foreign language without feeling stupid at some point. You have to get over that.  You have to twist your mouth into stange new shapes that make you feel like a caricature; you will speak and not be understood and you will listen and not understand. A LOT.  It's really okay and in fact necessary to learning. If you think about it, what's the big deal? So you look stupid. Who cares?

If you instead give yourself credit every time you feel stupid you can turn this around. Give yourself a little mental gold star each time you feel stupid because those moments are learning moments. Feeling stupid is actually a sign of progress, or the moment just prior to progress.

6. Find out where you are (and therefore what the next stage is)
I strongly advise you measure your level using CEFR levels (…) as these are now standard across Europe.

If you want find out approximately what level you are, you can take our test here:

7. Set goals
Plan your language learning journey in stages.  You've seen how long the journey is, so just like climbing a mountain, it's advisable to plan the journey in stages.

Goal setting (and measuring progress against those goals) is one of the most effective tools in your learning arsenal.  I highly recommend setting short term and longer terms goals

Short term goals can be as simple as how many hours of study you will do each week. If you (say) want to study one hour a day then write seven boxes on a sheet and every hour you study, check a box. It feels good and you're measuring progress which is visible to you even when you don't feel like you're progressing.

Set longer terms goals like passing a specific CEFR level.

It's really worth while registering to take DELF / DALF exams which are French exams that match the CEFR levels:
DILF, DELF and DALF – Everything you need to know about French Diplomas.  There are similar diplomas for most languages.

8. Repetition, Repetition, Repetition
Repetition is absolutely vital to learning most things but especially important when learning a language. It sounds boring, but it doesn't need to be. More on this in a moment.

9. Recall is more important than revision
Practising recall has proven to be 300% more effective than revising something.  In other words, you must challenge yourself to "produce" French, not just comprehend it.  The metaphor I use for memory is a field of long grass.  You drop lots of things in it, but to make them easy to find again, you must practise retrieving them.  Every time you do, you tread down the path to the thing you're recalling and it gets easier to follow.

Anything you do to practice recall is going to help your French.

If you can, the best way is of course to practise speaking with a real French person

Our site, offers thousands of tests which will adapt automatically to you and measure your progress at each level.

All of this is building towards my ultimate language learning trick.

If we combine these point (especially 8 and 9) there is an obvious conclusion: the quickest way to learn a language that I have found is to…

10. Rote learn set texts in French

This is my number one trick and I've found this to be singularly the most effective method in acquiring a language rapidly

Find a text that you can learn in a week (you must have audio – this is essential).

Pick a text on a subject you find interesting and at the right level for you (i.e. a bit challenging but not too hard).  If you're a beginner keep it short, i.e. a few sentences at a time.  Graphic comics are really good for beginners (things like Peanuts) which you can order online.

As you progress you can pick longer texts and learn a few paragraphs, or pages of dialogue at a time.  I like using film or theatre texts, or books I liked as a kid which are also good because the language is usually simple.

Listen to the piece at least ten times (repetition) before starting to try to learn it.  Start to commit it to memory (practise recall). You'll find this very hard at first and it will show you just how important it is to practise recall.

Give yourself a week to learn the piece. Why? Because after seven nights of sleep, something magical happens…

11. Sleep
Sleep is vital to memory. In fact, research shows the time of day that you sleep is not that important. Daytime napping is very effective.  Don’t deprive yourself of sleep for too long after you've learned or practised something.  When you sleep your brain starts to build structures to turn short-term memories into long-term memories.  It may be different for you, but I've found that after about seven nights of sleep is about the amount needed (with daily practise) for a text to be effortless to recall.

12. Exercise
We tend to think of our brains as separate from our bodies, but of course the brain is part of body. If you exercise, you get huge mental benefits.  It might sound bizarre, but keeping fit will help you learn a language.  You can even combine the two efforts by listen to French audio during a workout or run.

13. Learn about learning
I've found that every hour I invested in learning about learning paid off many times over in my learning speed of actual content.  There's general stuff that you can learn about learning that works for everyone, and then there are your own personal learning tricks that can develop; this is about just taking time to reflect on what work best for you and thinking about how to improve on what you're doing.

Hope that's helpful!

What works the best when learning a new language?

What are the characteristics of a bad software engineer?

Answer by Nachiket Naik:

  1. In my experience, these are some characteristics of bad software engineers:

1) The Stack Overflow bot: This person ran into an error, did a quick Google search and applied the first solution they found. The problem here is not that of copying from Stack Overflow. I think there are more solutions on Stack Overflow than any reference guide or manual. Don't get me wrong, it's a wonderful resource, if not the best. The problem is the robotic application of it without understanding the consequences. The problem is the application of it without fully understanding the context of it and whether it really applies to the current problem at hand. More often than not, I have seen people believe more of what they see on online forums than the code/system in front of them.

2) The I-am-not-a-tester: I don't need to test the code; that is the job of the testers. I don't think that even in this age of mature Agile methodologies, this attitude has waned. There is still an inertia against testing their code. Part of it comes from lacking the interest to set up a testing environment and partly from lack of coherent knowledge of testing. (Is it also partly due to an unspoken stigma against testers in the developer community.)

3) The I-hate-documentation: Some people believe that code documentation must be poetic and hence they lack the skill to do it, ergo not their job. In my opinion, these are the #1 foes of sustainable software. Good software is not software that provides a million cool features. Good software is one that has a few good features that are used consistently by many people and read/updated/modified by a thousand. This brand of developers who believes less in technical communication and precise and detailed documentation is the greatest weed to a company's success.

4) The ugly: My code works, but:

  • I have variables named x, flag, str, arr, etc.
  • Most of what I write is in one giant method.
  • There is no indentation.
  • No consistent coding convention or style.
  • Global variables spewed all over the place, etc.

This is the most annoying thing for me personally. It's not the issue that the code is bad. It could potentially be the greatest piece of code written. But if a diamond necklace is buried in the debris of the Titanic, nobody will find it, and nobody will want to clean it, wear it, use it.

5) The short-term investor: He codes. He deploys. He moves on. No attempt to learn the problem. No interest in the domain. Just give this guy a piece of code, he will slog on it overnight and hand it over. You got a fix/working software. Nothing more achieved from it. Sometimes, it's important that you have certain selfishness in the developer, one who not only cares about the deadline, but also cares about what he/she got to learn from it.

6) The protester: "I didn't do this". "This looks bad". "Not my problem". "This isn't related really to my fix, but someone way over there made a mistake". "I hate this (loop this sentence 10 times a day)", "I can't fix this, get the person who made this code to fix it".
The person who coded that mistake has moved on, when will you?

7) The dictator: My way or the highway is their motto. It's their "ideas" vs "your ideas", not "project ideas". It's their solution vs your solution. I bet there will be an argument for sure. Somehow they will keep coming back to a part of code that you implemented. It somehow discomforts them even if it works, tests, and looks perfectly fine. This person is a big bottleneck to productivity and will be the first person to crumble under pressure and start pointing fingers. This person is not good for the team, however experienced/good a developer he may be.

8) The overcautious: The Java developer who just froze when he learned that he would have to write a Python script. The developer who panicked on learning that something in the registry needs changing. The developer who cringes at having to input things in the database. These people will do anything to avoid getting out of their comfort zone. They have weird superstitions related to having to touch certain parts of the system. I have learned, from personal experience, that this phenomenon is common with new developers. Good developers show a tendency to slowly/swiftly move out of their comfort zone in exploration.

9) The careless: Forgets to take a backup, snapshots, has multiple working directories of code, leaves system out, prints in production code, etc. Again, this is a newbie tendency and gets better with more professional exposure.

10) The lazy pseudo-hacker: They pride themselves at being able to trick the system into working. They find magical solutions to seemingly complex problems. My experience says that 9 out of 10 times, it's just a facade. The hack is bad and will crash sooner or later and will cost much more than having to deal with it, with extra time right now.

EDIT: Please drop in comments. Maybe we could start a new follow-up question as to how a managers/peers/colleagues could handle these cases because almost all of them can be helped to become better. A design pattern of sorts for fixing programmer smells. :-)

What are the characteristics of a bad software engineer?