Web hosting Web hosting

Saturday, 24 December 2016

The World In 2025

1. A $1,000 Human Brain

In 2025, $1,000 should buy you a computer able to calculate at 10^16 cycles per second (10,000 trillion cycles per second), the equivalent processing speed of the human brain.

2. A Trillion-Sensor Economy

The Internet of Everything describes the networked connections between devices, people, processes and data. By 2025, the IoE will exceed 100 billion connected devices, each with a dozen or more sensors collecting data. This will lead to a trillion-sensor economy driving a data revolution beyond our imagination. Cisco's recent report estimates the IoE will generate $19 trillion of newly created value.

3. Perfect Knowledge

We're heading towards a world of perfect knowledge. With a trillion sensors gathering data everywhere (autonomous cars, satellite systems, drones, wearables, cameras), you'll be able to know anything you want, anytime, anywhere, and query that data for answers and insights.

4. 8 Billion Hyper-Connected People

Facebook (Internet.org), SpaceX, Google (Project Loon), Qualcomm and Virgin (OneWeb) are planning to provide global connectivity to every human on Earth at speeds exceeding one megabit per second.
We will grow from three to eight billion connected humans, adding five billion new consumers into the global economy. They represent tens of trillions of new dollars flowing into the global economy. And they are not coming online like we did 20 years ago with a 9600 modem on AOL. They're coming online with a 1 Mbps connection and access to the world's information on Google, cloud 3D printing, Amazon Web Services, artificial intelligence with Watson, crowdfunding, crowdsourcing, and more.

5. Disruption of Healthcare

Existing healthcare institutions will be crushed as new business models with better and more efficient care emerge. Thousands of startups, as well as today's data giants (Google, Apple, Microsoft, SAP, IBM, etc.) will all enter this lucrative $3.8 trillion healthcare industry with new business models that dematerialize, demonetize and democratize today's bureaucratic and inefficient system.
Biometric sensing (wearables) and AI will make each of us the CEOs of our own health. Large-scale genomic sequencing and machine learning will allow us to understand the root cause of cancer, heart disease and neurodegenerative disease and what to do about it. Robotic surgeons can carry out an autonomous surgical procedure perfectly (every time) for pennies on the dollar. Each of us will be able to regrow a heart, liver, lung or kidney when we need it, instead of waiting for the donor to die.

6. Augmented and Virtual Reality

Billions of dollars invested by Facebook (Oculus), Google (Magic Leap), Microsoft (Hololens), Sony, Qualcomm, HTC and others will lead to a new generation of displays and user interfaces.
The screen as we know it — on your phone, your computer and your TV — will disappear and be replaced by eyewear. Not the geeky Google Glass, but stylish equivalents to what the well-dressed fashionistas are wearing today. The result will be a massive disruption in a number of industries ranging from consumer retail, to real estate, education, travel, entertainment, and the fundamental ways we operate as humans.

7. Early Days of JARVIS

Artificial intelligence research will make strides in the next decade. If you think Siri is useful now, the next decade's generation of Siri will be much more like JARVIS from Iron Man, with expanded capabilities to understand and answer. Companies like IBM Watson, DeepMind and Vicarious continue to hunker down and develop next-generation AI systems. In a decade, it will be normal for you to give your AI access to listen to all of your conversations, read your emails and scan your biometric data because the upside and convenience will be so immense.

8. Blockchain

If you haven't heard of the blockchain, I highly recommend you read up on it. You might have heard of bitcoin, which is the decentralized (global), democratized, highly secure cryptocurrency based on the blockchain. But the real innovation is the blockchain itself, a protocol that allows for secure, direct (without a middleman), digital transfers of value and assets (think money, contracts, stocks, IP). Investors like Marc Andreesen have poured tens of millions into the development and believe this is as important of an opportunity as the creation of the Internet itself.

Bottom Line: We Live in the Most Exciting Time Ever

We are living toward incredible times where the only constant is change, and the rate of change is increasing

Friday, 16 December 2016

Best Book for Writing Clean Code


While I agree with most of the answers that books are not (on their own), the best way to learn to write clean code, they are a great supplement to other things you might be doing (like reading code, getting your code reviewed, etc). If you’re anything like me, in addition to practice, you like having a broader reference where someone smart has spent a non-trivial amount of time figuring out cataloging and summarizing things. Even things that are intuitive make a lot more sense when someone has named them, structured them, etc.
Here are my favorites:
  1. Uncle Bob’s Clean Code : A very opinionated take on why writing good code matters, and what constitutes good code. It clearly documents the pitfalls of what bad code can lead to, and minces no words (“[bad code will] bring an organization to its knees” and “programmers who satisfy themselves with merely working code are behaving unprofessionally”). It covers principles, patterns,
  1. heuristics, and “smells”, and includes case studies so you can see, first-hand, how everything applies to real world situations. Most importantly, it helps frame your mind for what is, in my opinion, the most important part of writing good code: empathy (for others who will read your code, and even your future self). For instance, the “Boy Scout Rule” is a good principle to work by (“leave things in better state than you found them”). On the downsides, it is a bit less “structured” than Code Complete, but that didn’t bother me.
  2. Code Complete : I was given a copy of this on my first day of work at Google. This is the definitive guide on writing code. The first downside, however, is its length (it’s about 900 pages long, and took me about a year to get through). It is also a bit dated. Don’t get me wrong, most of these principles are universal, but over time the software development process has adapted, and subtle tradeoffs like maintainability vs. speed can change. So I’d definitely start with Clean Code first.
It was once described to me that Code Complete is the Bible, and Clean Code is the handbook. If you’re just getting started, I’d start with the handbook.
A final note: A lot of people will point out that most of the content in these books is obvious and intuitive, but at the end of the day, a lot of times the problem isn’t not knowing, it’s not reminding. I’ve seen a lot of experienced developers (including myself) make bad trade-offs.

Best Ways to Learn Programme

                  Best ways to Learn Programming


  1. CodeHS -- Personally graded, video-then-program format problems, starting with a toy language called Karel and moving up to Javascript, culminating in you making the game Breakout in your browser. Founded by two ex-CS106a TAs at Stanford from which the curriculum was largely adapted. They have probably 40 hours of really good content and, most importantly, provide you friendly, one-on-one help with like ~3 hours turnaround when you need it. Check out my version of Breakout I made after doing all of the content: EpicBreakout. (1)
  2. Google's Python Class -- Unlike above, requires some set-up on your machine (i.e. you're not coding in-browser), but still good. About two days worth of lectures on Python with a handful of good problems, culminating in regular expressions (like a custom CRTL + F in a Word document) and a problem where you descramble an encoded image from a website.
  3. CodingBat -- Python and Java problems. No frills, just the exercises -- probably better for someone with a little bit of background (meaning you know what a function/parameter is and can use The Google to figure out/find syntax/functions you need). The site was made by the same guy who taught the Google Python Class.
  4. Khan Academy -- A few intro tutorials (mostly graphics/animation-focused) in JS using a well-regarded library (Processing.js) and then a wide-open project space for you to see programs other people have made (i.e. the end result and the code) and to make your own, potentially forking off of their work. Here's a game that some guy made that served as inspiration for my version of Breakout: Mercury Subspace. Pretty great, right?
  5. Codecademy -- Solid read-then-write-code format of small problems broken into different subpieces. I used their HTML/CSS tutorials to get a basic background before making my personal website (http://www.thenickhuber.com/) and am going to use their stuff on more advanced JS and jQuery when I get to it. Still, their grader is a bit buggy and there's a large variance in course quality/overlap in material, since everything is written by different people.
  6. Learn Python The Hard Way -- Read-then-implement exercises, starting from no assumed knowledge. Good, but still not as good as interactive problems; I gave up after doing ~20% or so of it because it's unapologetically repetitive, but have read lots of good reviews of it.

Other good stuff I want to check out:
  1. Stanford iPhone course (all slides and assignments: http://www.stanford.edu/class/cs...) -- an iPhone app seems like such a good early project, because it's so easy to show your friends what you've made, but have to figure out how completeable it would be for me. Also, you can't get your problem sets graded if you're just working on your own from the material online.
  2. K&R (http://www.amazon.com/Programmin...) -- Highly regarded intro book on C and implementations of the most canonical algorithms. (If you know of a website that tries to do something like this, would love to get it from you.)
  3. The many CS courses on Coursera and Udacity. However, I think it's really important that you have someone grading your work so that you can get feedback (and that you actually do the problems rather than just watch the lectures). I'm not sure if this is possible if you take the course "off-cycle" and how good the problems are, but still worth taking a look.

After a month, I've now got a better idea of what I can make and this then informs things that I think would be cool to make. At this point, I'm most excited about continuing with this project-based learning approach as I think it's more effective/lasting/fun than more tutorials/classes, but it's still tough to get this outside of the university/work environment.

---
  1. Note: it's unwinnable right now -- I need to refactor and expand it, including a bunch more powerups and the final showdown with our hero's final boss, The Brick King. FYI, my high score is like 550 and the game gets buggy at high levels. Switching to bullets helps and actually adds some unexpected difficulty. Would love to get your feedback/ideas.

A Bad Software Engineer

            Characteristics of a bad software engineer



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. :-)


Life Advice

What can people start doing now that will help them a lot in 5 years.

  • If you do anything, do this first one: learn how to work hard and stick with something. Learn how to turn off Facebook and control your addiction to social media. You'll instantly be ahead of a majority of your generation.
  • Video games are a time sink. If you can play for an hour and say "That was fun, let's do something else" then you're ok. Otherwise, just get rid of them.
  • Pick up an athletic hobby that you can do through the years, or your sedentary academic lifestyle will do horrible things to your posture, back, and gut.
  • Learn how to deal with interpersonal conflicts. Read Crucial Conversations and practice - it's a lifechanger (shameless plug: Crucial Conversations Tools for Talking When Stakes Are High, Second Edition)
  • Learn as much programming as you can. It's never a bad idea to learn a programming language (unless that language is COBOL—just kidding, you can even make money coding in COBOL). I've found Treehouse is worth the investment.
  • Learn how to display data in R.
  • Learn how to talk on the phone with people you don't know. It still terrifies most people. Get a phone sales job and quit after a few weeks.
  • Start some kind of little side venture to learn entrepreneurial principles. Start a window washing business, buy and sell stuff on Craigslist, do anything. You might need them if you're in between jobs.
  • Take a course on statistics and how they're misused, specifically how faulty causal arguments are made. It will change the way you approach almost any discussion, quantitative or not. (Read How to Lie with Statistics: Darrell Huff)
  • Always have a private place where you can talk out loud to God every day. Even if you're not religious or don't believe in God. Talk out loud to the universe. Sort out your thoughts, verbalize them, and then write down what comes to mind. Something wiser than you is listening and responding, even if it's just another side of you.
  • Use http://Mint.com to track your expenses. Make a budget and learn how to stick to it. Learn to live lean now while you can, so you won't be forced to later on.
  • Learn a foreign language, but only if you anticipate using it. Sure, there are side benefits, but you'll forget it.
  • Learn how to network. Read "Never Eat Alone."  Hint: it's about doing things for other people.
  • Learn how to cook tasty, cheap food (If you buy one cookbook in your life, Cal Peternell: Twelve Recipes is a good one.) And make this bread. No really. http://www.steamykitchen.com/168...
  • Find music that inspires you and makes you feel alive. Listen to it every morning and if it's something embarrassing just don't tell your friends about it.
  • Save up a few thousand dollars and go somewhere crazy with a few friends. Live in a hostel for a few weeks. Get malaria if you have to. It will change your life and you will think about it forever (not the malaria part - you'll get over that.)
  • When someone promises you easy money, run the other way. Yes, it IS a scam.
  • Read a book a week (I listen to Audible.com the car). When you get ridiculously wealthy, read a book a day. Read fiction too.

Wednesday, 23 November 2016

What is a Full Stack developer?

What is a Full Stack developer?

Layers of the Full Stack:

  1. Server, Network, and Hosting Environment.
    1. This involves understanding what can break and why, taking no resource for granted.
    2. Appropriate use of the file system, cloud storage, network resources, and an understanding of data redundancy and availability is necessary.
    3. How does the application scale given the hardware constraints?
    4. What about multi-threading and race conditions? Guess what, you won’t see those on your development machine, but they can and do happen in the real world.
    5. Full stack developers can work side by side with DevOps. The system should provide useful error messages and logging capabilities. DevOps will see the messages before you will, so make them count.
  2. Data Modeling
    1. If the data model is flawed, the business logic and higher layers start to need strange (ugly) code to compensate for corner cases the data model doesn’t cover.
    2. Full stack developers know how to create a reasonably normalized relational model, complete with foreign keys, indexes, views, lookup tables, etc.
    3. Full stack developers are familiar with the concept of non-relational data stores and understand where they shine over relational data stores.
  3. Business Logic
    1. The heart of the value the application provides.
    2. Solid object oriented skills are needed here.
    3. Frameworks might be needed here as well.
  4. API layer / Action Layer / MVC
    1. How the outside world operates against the business logic and data model.
    2. Frameworks at this level should be used heavily.
    3. Full stack developers have the ability to write clear, consistent, simple to use interfaces. The heights to which some APIs are convoluted repel me.
  5. User Interface
    1. Full stack developers: a) understand how to create a readable layout, or b) acknowledge they need help from artists and graphic designers. Either way, implementing a good visual design is key.
    2. Can include mastery of HTML5 / CSS.
    3. JavaScript is the up and coming language of the future and lots of exciting work is being done in the JavaScript world (node, backbone, knockout…)
  6. User Experience
    1. Full stack developers appreciate that users just want things to work.
    2. A good system doesn’t give its users carpal tunnel syndrome or sore eyes. A full stack developer can step back and look at a process that needs 8 clicks and 3 steps, and get it down to one click.
    3. Full stack developers write useful error messages. If something breaks, be apologetic about it. Sometimes programmers inadvertently write error messages that can make people feel stupid.
  7. Understanding what the customer and the business need.
    1. Now we are blurring into the line of architect, but that is too much of a hands off role.
    2. Full stack developers have a grasp of what is going on in the field when the customer uses the software. They also have a grasp of the business.

Other Pieces of the Puzzle:
  1. Ability to write quality unit tests. By the way, even JavaScript can have unit tests these days.
  2. Understanding of repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale.
  3. An awareness of security concerns is important, as each layer presents its own possible vulnerabilities.

Closing Thoughts:
It is very bad practice to tightly couple code to a specific implementation (library, OS, hardware, etc). Just because a full stack developer understands the entire spectrum doesn’t mean they have license to take shortcuts. Well, actually they do if it is a build and throw away prototype.
Technology start-ups need full stack developers for their versatility!  However, as an organization matures, it needs more and more focused skills.

 

Wednesday, 16 November 2016

Snapchat Parent Files for $25 Billion IPO

Snap Inc. has confidentially filed paperwork for an initial public offering that may value the popular messaging platform at as much as $25 billion, a major step toward what would be one of the highest-profile stock debuts in recent years. 
 
The company, formerly known as Snapchat, made the filing with the Securities and Exchange Commission in recent weeks, according to people familiar with the matter.
An IPO, expected as early as March, could value Snap at between $20 billion and $25 billion, one of the people said. The Wall Street Journal reported last month that the valuation could be $25 billion or more. The reason for the discrepancy isn’t clear.
If Snap pursues an IPO at the currently expected valuation, it would still be the largest U.S.-listed technology offering since Chinese e-commerce company Alibaba Group Holding Ltd. made its debut at a $168 billion valuation in 2014.
ENLARGE 
That could provide a boost for the IPO market, which has had a dismal year. Just 103 companies have listed their shares in the U.S. in 2016, raising $21.8 billion, according to data provider Dealogic. That is down from 165 deals raising $34.6 billion at the same juncture last year and marks the lowest year-to-date level for deals since 2009 and proceeds since 2010. Technology IPOs have experienced similar weakness.But bankers and investors are optimistic that a successful debut for Snap would convince other bellwether tech companies to tap the IPO market.The recent strong performance of the few tech-company shares that have started trading this year has given market participants confidence that the new-issue market is due for a rebound next year.Snap would become the first of a small batch of highly valued and closely watched venture-backed companies, such as Uber Technologies Inc., to test the public markets.The four-year-old company, whose Snapchat app lets users send disappearing messages from their smartphones, was eligible to file its IPO paperwork confidentially because it expects to have less than $1 billion in revenue this year. Under the 2012 Jumpstart Our Business Startups Act, companies with annual revenue below $1 billion have the option to file an initial draft of their IPO prospectus with regulators and make adjustments before unveiling it publicly.Morgan Stanley and Goldman Sachs Group Inc. would be lead underwriters of a Snap IPO, according to people familiar with the matter. Snap executives plan to be relatively conservative in pricing the offering, the people said. Recent tech offerings have generally been priced conservatively. The average multiple of total company value to expected sales for tech companies at their debut this year was three times, compared with 3.6 times last year and 4.9 times in 2014, according to a recent report from Deutsche Bank’s equity-capital-markets group.There is no guarantee that Snap, based in Venice, Calif., will proceed with a share sale in the time frame it currently envisions, or that it will achieve the valuation contemplated.Snap’s main source of revenue is selling ads on Snapchat that are slotted in between stories contributed by media partners and video diaries posted by the app’s users. Marketers also can buy location-based or event-based geofilters and “lenses” that add quirky characteristics to photos and videos.Snap has been working hard to win over Madison Avenue ahead of the IPO. Advertisers are intrigued by the Snapchat app, which reaches more than 150 million users daily, including 41% of 18- to 34-year-olds in the U.S., according to Nielsen.But marketers and ad agencies have been frustrated with Snap’s tight controls on ad content and the long wait times some have experience getting ads approved by the platform. Others say those problems amount to growing pains.Snap has been taking some steps to make life easier for advertisers. It released an “application programming interface” that helps advertisers buy ads through a more automated process. And it has lifted some previous restrictions, allowing marketers to target customers using email databases and other data sources.The company’s revenue has grown quickly since it started running ads in 2014. Snap told investors earlier this year that it expected revenue of between $250 million and $350 million in 2016 and as much as $1 billion in 2017.It is already ahead of the top end of its 2016 forecast, people familiar with the matter have said. In 2015, the company generated just $60 million in revenue. Snapchat loses money, according to people familiar with the matter, as it focuses on revenue growth and finding ways to make money off its big user base.In September, the company renamed itself Snap in a bid to show that its ambitions extend beyond Snapchat. As part of the change it unveiled camera-equipped sunglasses, called Spectacles, that can record video in short bursts. The foray into hardware potentially gives Snap another source of revenue, but poses new challenges such as managing inventory.
Web hosting