What are the best new products or inventions that most people don’t know about?

What are the best new products or inventions that most people don't know about? by Nicholas Hall

Answer by Nicholas Hall:

Based on GravityLight 1.3 billion people worldwide don’t have access to electricity, with the majority relying on kerosene for lighting. GravityLight™  is an innovative device that generates light from gravity. It takes  only 3 seconds to lift the weight that powers GravityLight creating 25  minutes of light on its descent.

What are the best new products or inventions that most people don't know about?

What is Elon Musk like in person?

What is Elon Musk like in person? by Tom Alexander

Answer by Tom Alexander:

I only spent the one afternoon with him, at a Model S launch event, but was struck by a few things:

  • He’s a much more imposing presence that TV appearances suggest – I was surprised at just how tall and portly (yes, I mean he looked quite fat) he was. He’s a seriously big guy, and I must admit I was a pretty intimidated by him.
  • He has a real nervous energy about him – He has a fast walking pace, wanted to get things done quickly, and you could see he was always thinking ahead, not wanting even idle time to go to waste (eg. while being introduced to go on stage, he was simultaneously listening to the speaker while answering emails on his phone)
  • He comes across quite cold – not unpleasant, just direct, polite and with no airs or pretences. While speaking with a small team of us, he answered our questions sincerely, but when someone asked what he obviously considered a dumb question, he didn’t hide the fact that he thought so.

What was most striking was how these personal qualities are mirrored by the overall Tesla Motors corporate culture. He has a very no-nonsense, direct, “get shit done” persona, and that’s exactly what the vibe is at the company.

What is Elon Musk like in person?

Why do charismatic people easily get what they want in life?

Why do charismatic people easily get what they want in life? by Jordan Allen

Answer by Jordan Allen:

After his son was done chatting up the receptionist at their optometrists, a buddy of mine asked his son "How come you chat up everyone you meet?" and his son turned to him and said "I'm building an army."

Charismatic people have an army behind them. Why wouldn't they have any easy time getting what they want?

Why do charismatic people easily get what they want in life?

How do I train myself to code faster and with fewer bugs?

How do I train myself to code faster and with fewer bugs? by @Carniphage

Answer by Glyn Williams:

Three programmers were asked to cross a field and go to the house at the other side.

The novice programmer looks at the short distance and says, "it's not far!. That will take me ten minutes"

The senior programmer looks at the field, thinks for a while and says "I should be able to get there in a day".  The novice looks surprised.

The ninja programmer looks at the field and says. "Looks like ten minutes, but I think fifteen should be enough". The senior programmer sneers.

The novice programmer sets off, but within a few moments, explosive land mines go off, blasting huge holes.  Taking him off course, and requiring him to double back and attempt the crossing many times. It takes him two days to reach the goal. Although he is shaking and injured when he arrives.

The senior programmer sets off on all fours. And carefully taps the ground searching for mines, proceeding only when it is safe. Slowly and meticulously he crosses the field over the course of the day. Only setting-off a couple of mines.

The ninja programmer sets off, and walks directly across the field. Purposefully and directly. He arrives at the other side in just ten minutes.

"How did you do it"?, the others ask. "How come the mines didn't get you?"

"Easy" he replies. "I didn't plant any mines in the first place".

Programming gets tough when we encounter logic bombs which we (or others) have planted for ourselves. We write logic bombs all the time.
And they sit there, beneath the surface, waiting to go off. Often with vast and unpredictable consequences.

With each new module of code added to a project, the project complexity goes up. Not in a linear level but by some exponential function.

The programmers mind is a limited resource, so this exploding level of complexity eventually overwhelms the programmer. At some point it becomes too much to hold in your head. That's the turning point.

That's when the bombs start to go off. The gotcha about not modifying the array while iterating goes off. Then the bomb where the array index is occasionally negative. And there's the one where the second thread can actually change the state of the object between the point where you enter the function and the point at the end. Boom, Boom, Boom.

I think the fastest, most, reliable programming is about developing a style where you avoid this class of problem.

Write code which clearly describes what it does. Select meaningful symbol names which are precise and unambiguous. Be very precise with naming schemes, don't use different words to describe the same stuff.

Adopt the simplest solutions if they are available. Do not optimise for speed. Do optimise for readability and transparency.

Don't fool yourself into thinking your code is magically reusable, if you didn't originally write it with reusability in mind. Instead, start with single use code, and keep it inline. If it makes sense to generalise it, then be prepared to re-write it completely.

How do I train myself to code faster and with fewer bugs?

Are there good YouTube channels that teach programming languages?

Are there good YouTube channels that teach programming languages? by @ossia

Answer by Quincy Larson:

There are excellent YouTube channels focused on programming languages and other development tools. Here are 12 of the most popular ones:

#1: MIT OpenCourseWare

MIT has a great YouTube channel with tons of lectures on a wide variety of programming languages and technologies.

#2: The New Boston

A popular channel that offers screencast tutorials on Java, C, JavaScript, and other languages. If you like long video tutorials, this is a good place to start.

#3: Computerphile

One of my favorite channels, Computerphile covers a wide range of technology concepts, such as databases and information security.

#4: DevTips

Travis Neilson’s channel focuses mainly on front end development and has some excellent CSS tutorials. Also, he recently got a job at Google and documents their interview process in detail.

#5: Engineered Truth

https://www.youtube.com/watch?v=…

Matthew Tran is a recent engineering graduate who focuses on helping engineers learn to code. He’s interviewed a lot of developers, including Travis Nelson and myself.

#6: LearnCode.academy

This channel has a lot of video tutorials on JavaScript technologies, such as React and Redux.

#7: Codecourse

This channel covers PHP and MySQL, with practical examples like how to build an e-commerce site.

#8: LevelUpTuts

This is a great resource for tutorials on PHP and WordPress.

#9 funfunfunction

Fellow Quora contributor Mattias Petter Johansson has a YouTube channel that focuses on JavaScript and functional programming.

#10: Coding Tutorials 360

This channel has screencast walkthroughs of how to complete coding challenges on sites like Free Code Camp and Code Combat.

#11 Coding Rainbow

Daniel Shiffman’s channel covers Python and data visualization in depth, and is pretty fun to watch.

#12: Free Code Camp

There are tons of 2-minute whiteboard explanations of various software engineering tools and concepts on Free Code Camp’s YouTube channel.

It’s tempting to dive in and binge-watch these channels. Instead, I recommend you following them, then gradually watch their videos gradually over time.

Watching videos can trick you into feeling like you’re making progress with your programming skills, but it’s a supplement – not a substitute – for actually spending time programming.

I only write about programming and technology. If you follow me I won’t waste your time.

Are there good YouTube channels that teach programming languages?

How can doing an M.Tech change my life?

How can doing an M.Tech change my life? by Anonymous

Answer by Anonymous:

Here is a piece of advice from a failure.

My friend, it’s not M. Tech, it’s only you who can change your life.

I would never like to see anybody in the situation I am currently in.

I also did my B.Tech in Information Technology & was almost in the same case as you are currently in.Then I prepared full time for GATE without joining any coaching for one year after my B.Tech, got admission offers from 5 of the 6 old IITs I applied to and joined one of them.

After joining IIT, I am screwing my life.I did not study.I don’t know why, but I did not study.I rarely submitted my assignments and projects.Submission deadlines just come & go, I do not submit.I just procrastinate a lot, I do not work hard enough to complete them and I am not a fan of unfair means. This year is the most stressful year of my life.I thought about committing suicide many times.

I don’t know why I am doing M.Tech, I don’t know what I want to do after M.Tech, I don’t know what I want to do for paying my bills, I don’t know what I want from my life, I don’t know why do I exist.

Who is responsible for all this?

I am.Surely, I am.Solely, I am.

Why I did not learn anything during my undergrad, why today I am not in a situation of describing my projects?

Because I did not work hard enough.

Why I did not work hard enough?

I don’t know.I could not figured it out.May be because of inertia.May be because of lack of interest/motivation.

I won’t say, I worked very hard for GATE but the study I did in those 7–8 months was way more than the study I did during my whole B.Tech.

Now after joining M.Tech. things are again tending to be same as B.Tech

It seems, doing M.Tech did not worked out. To change my life, I’ve to change myself.

In order to change my life, I have to change myself.I have to work hard.

You have to change yourself, try to find out what went wrong during your B.Tech, try to rectify them.Don’t worry about the interviews, focus on learning and put your heart in preparation, things will automatically get sorted out.

I gave M.Tech admission interviews at the Department of Computer Science and Engineering IIT Delhi, the Department of Computational and Data Sciences IISc and the Department of Computer Science and Automaton IISc last year. They just asked me my favourite subjects & the whole interview was based on just the subjects I chose.Leave the projects, professors even did not go outside the 2 subjects I chose. By the way, the subjects I chose at all three places were Probability and Linear Algebra. So, I did not face even a single question outside these subjects. I got an admission offer from IIT Delhi.

Best wishes in all your work.

How can doing an M.Tech change my life?

How can one go about doing research in Machine Learning, provided one has the required knowledge gained from MOOCs in Coursera or edX?

How can one go about doing research in Machine Learning, provided one has the required knowledge g… by Yoshua Bengio

Answer by Yoshua Bengio:

I don’t think that a MOOC is enough. You need to practice seriously. For example, try to reproduce the results obtained in a couple of papers of interest to you, compete in a Kaggle competition, etc. Then try to join an academic lab in which there are other students and researchers doing deep learning, either as a visitor/intern or a graduate student.

How can one go about doing research in Machine Learning, provided one has the required knowledge gained from MOOCs in Coursera or edX?

Why is math so easy?

Why is math so easy? by @sabarish1594

Answer by Sabarish Manogaran:

Math is not easy. It looks easy.

Have you heard of “The Collatz Conjecture!”

Take any positive integer. If it's divisible by two, divide it by two. Otherwise, multiply by 3 and add 1. Follow the above steps continuously and you will eventually get 1.

The Collatz Conjecture states that no matter what number you start with, you will eventually reach 1.

Even a 10 year kid would easily understand this.

But still there is no proof for this.

🙂

Why is math so easy?

How do you explain the imaginary number i to a layman?

How do you explain the imaginary number [math]i[/math] to a layman? by Nathan Pflueger

Answer by Nathan Pflueger:

You can end up going in circles if you try to explain what a mathematical object is. Often it's easier to explain what it does. Numbers can count things, but that's not all they can do. In particular, imaginary numbers do something different.

One way to understand what numbers do (besides count things) is that they scale things up. This is by no means the only way to understand what they do, but it's a good one to understand imaginary numbers. Here's what the number 2 does.

If you apply "2" to a picture, you zoom in by a factor of 2. The number 1/2 does the reverse: it shrinks the image by a factor of two.

You can also understand square roots this way. Here's what the number [math]\sqrt{2}[/math] does. I've shown it twice in a row.

What makes it the square root of two is that if you do it twice, the result is the same as doing "2" once.

What about negative numbers? What does -1 do? Well, it should move the point (x,y) in the image to the point (-x,-y). So it flips the whole image around. Here's what -1 does.

Now let's try to put all this together. What should [math]\sqrt{-1}[/math] do? Whatever it does, it had better be true that if I do it twice, that's the same thing as doing -1. If you think for a bit, you'll come up with one possible solution.

That's what [math]i[/math] does. It rotates pictures a quarter-turn (by convention, it rotates counterclockwise, and [math]-i[/math] rotates clockwise, but it could just as easily have been defined the opposite way).

Imaginary numbers (and a generalization of them, the quaternions) are essential objects in graphics, because they can be used to encode rotations of an image. If you think of them as "ways to alter an image," they don't feel nearly as abstract as if you try to think of them as "numbers" in the usual sense.

If the layman in question knows a bit about matrices, I would point out that you can make all of this mathematically precise by defining a complex number to be a 2 by 2 matrix (with real-number entries) of the form [math]\left( \begin{array}{cc} a&-b\\b&a\end{array} \right)[/math], which corresponds to the usual notation [math]a+bi[/math]. Multiplication of complex numbers is matrix multiplication. Then the transformations shown above are just the linear transformations of the plane defined by these matrices.

How do you explain the imaginary number i to a layman?

What are some of the best ways to learn programming?

What are some of the best ways to learn programming? by @choxi

Answer by Roshan Choxi:

It's been my sole focus to answer this question for the last two years, and I think a lot of the resources mentioned here are great but I've noticed there are three strategies that successful students consistently use better than anyone else regardless of what resources they use:

1. Focus on habits, not goals
2. Learning alone is painful
3. Build things

Note: some of this is borrowed from my answer to another Quora question: How can I prepare for Bloc?

1. Focus on habits, not goals

It seems counterintuitive that you shouldn't focus on goals, but hear me out — it's all about leverage. Anyone who works with me knows that I dweebishly reference the R'as Al Ghul scene in Batman Begins pretty much 3-4 times a day:

Our investors at Bloc are getting tired of board meetings starting with Batman clips.

R'as tells Bruce:

"Rub your chest, your arms will take care of themselves."

If you focus on building the habit of programming for 20-30 hours a week, you will reach your goal of being a web developer. If you focus on the goal of being a web developer in X months, you get nothing from that but stress and insecurity about how far along you are. Focus on the habit, not the goal. Rub your chest, your arms will take care of themselves.

So here's what you should do right now: put 15 minutes a day on your calendar to spend time programming. Don't do more than 15, just focus on doing 15 minutes a day. If you can do it successfully with no excuses for a week, try bumping it up to 20 minutes a day. Don't try to overextend yourself by doing an hour a day right off the bat, this is going to be a 10,000 hour marathon so we're focusing on developing the habit right now. The number of minutes you put in isn't as important as you showing up each day.

2. Learning alone is painful

When I was learning web development, the two biggest social components to my learning were having a mentor and belonging to a community.

Having a mentor

I worked at a small startup called merge.fm while in college. I learned more in the summer I spent working with one of their cofounders than I did in the entire previous year at my university. There's just something about working alongside an expert who knows more than you that really accelerates your learning, you're able to pick up on how they think and unveil what you don't know you don't know. There's a reason why mentorship used to be the de facto standard of learning a new trade, it's very effective.

Belonging to a community

For me, the two communities I belonged to were the Illini Entrepreneurship Network (a student organization at my university) and HackerNews (a large hacker/startup oriented online community).

I didn't learn what objects and classes were from HackerNews, but I learned a different category of things. I learned that nobody likes Javascript. I learned that Rubyists are the hipsters of programming. I learned that Bret Taylor, Rich Hickey, and John Carmack are programming gods, and that software companies that are truly serious about coffee have kitchens that look like meth labs.

In short, I learned how to talk shop. That turns out to be important when you're working with other developers, but it's also the thing that makes you feel like a developer.

3. Build things

In the first year of learning web development, I built:

  • A Digg Clone (from a Sitepoint book on Rails, I believe it's out of date now though)
  • An E-Commerce App (from Agile Web Development with Rails 4)
  • A GeekSquad-esque App (personal project)
  • A Realtime, Online Classroom (personal project)
  • A Foreign Language Flashcard App (class project)

I think building real projects is important for many reasons, but the most important one to me is because it's fun. That's something that is tragically lost in classical education, but I think it's important enough to be on this list. Look for resources that show you how to build things, http://ruby.railstutorial.org/ is a good one.

4. Be a cockroach

I secretly added a 4th item for those of you who've stuck around to read this far down the page.

Paul Graham once told the founders of Airbnb:

"You guys won’t die, you’re like cockroaches."

You'll probably want to quit learning how to code at some point. Like anything worthwhile, it's difficult and will make you feel stupid at times. This is why #1 on this list is so important — stop worrying so much about whether you're making progress or how much longer it'll be until you feel like you've "made it." All you have to do is focus on showing up, for 10-30 hours a week. Be as mindless as a cockroach about everything else, and don't "die."

I made the statement years ago which is often quoted that 80 percent of life is showing up. People used to always say to me that they wanted to write a play, they wanted to write a movie, they wanted to write a novel, and the couple of people that did it were 80 percent of the way to having something happen. All the other people struck out without ever getting that pack. They couldn’t do it, that’s why they don’t accomplish a thing, they don’t do the thing, so once you do it, if you actually write your film script, or write your novel, you are more than half way towards something good happening. So that I would say was say my biggest life lesson that has worked. All others have failed me.

Woody Allen

What are some of the best ways to learn programming?