Geek Lands: self improvement

A fresh blog on latest technology and programming trends for the Geeks by a Geek.

Recent Posts

Showing posts with label self improvement. Show all posts
Showing posts with label self improvement. Show all posts

Tuesday, August 1, 2017

9 Books To Boost Your Understanding of Technology & Systems

August 01, 2017 0
9 Books To Boost Your Understanding of Technology & Systems

9 Books To Boost Your Understanding of Technology & Systems



We’re hearing of Mark Zuckerberg’s possible interest in running for president. We refer to Elon by his first name. Bill Gates is the richest man in the world. And every college kid dreams of becoming a tech billionaire. There’s a certain ‘hollywoodization’ of entrepreneurship. Nowadays it’s also much easier to start a business. Throw up a website using one of the many templates out there, host it on Amazon Web Services or GoDaddy, find a pain you think exists and go about trying to solve it. In some cases, folk even try to raise money before the idea is fully fleshed out. It feels that easy. What this has led to is a false narrative about the required level of understanding of what you need to build business.
It’s the easiest time in the world to start a business but it’s also never been harder to build one.
I hear this gap in foundational understanding of business and technology in the many conversations I have with founders. While I recommend that actually doing the work of starting a business and screwing it up is the best way to learn, I also share the story of ‘the Elephant and the blind men
a group of blind men all touch an elephant to learn what it is like. Each one touches a different part and consequently think it is something other than an elephant.
and share the lesson that one cannot tell the whole from the parts; because you think you see a small part of a problem in an industry does not mean you understand how to solve the problem. Most entrepreneurs jump into solving a problem without truly understanding the whole picture or the ‘why’ of the problem.
To help these founders along, I recommend some books that provide a systems understanding of technology. Here are 9 books that’ll ramp you up quickly so that, when you do step out there to start your business, you understand the trends you’re riding, what part of the business cycle you’re in and what foundational systems/models you’re going up against.
  1. What Technology Wants by Kevin Kelly. A good friend and fellow utility tech enthusiast friend (Eugene Granovsky) clued me into this book. Kevin Kelly would be considered the opposite of Neil Postman (below), as he is one of the foremost proponents of the value we can gain from the technological changes that are inevitable in our lives. He share more of these expectations he has of the technological systems changes around us in his newest book ‘The Inevitable. We’re already seeing the HOLOS = Tech/The Machine + 7 Billion Souls, a force he expounds upon, at play around us.
  2. Thinking In Systems: A Primer by Donella Meadow. The story of the elephant and the blind me above is also included in this, a personal favorite, book in explaining the need to understand systems as a whole. A holistic understanding of systems and the models that operate within these systems at all times is necessary before any disruption can happen. As I like to say, and unfortunately I cannot remember where or from whom I first heard this quote ‘to disrupt a thing, you have to truly understand it’.
  3. The Second Machine Age by Erik Brynjolfsson, Andrew McAfee: The current backlash against Artificial Intelligence and Robots etc. is nothing new. This book focuses on the impact of exponential and combinatorial technological change on human work. Read this as much for the message (we need to proactively do something to push back the worsening conditions of income disparity brought on by technology) as for the study of the systems that are impacted by game changing technological advances like AI and Machine Learning.
  4. The Master Switch by Tim Wu: I’m a big Tim Wu fan. In this book, he discusses the impact of technology (and the information flow that our technology makes possible) on the TV, movie and internet industries. The book is as much a journey through the life of these industries as it is a description of the cycles that technology goes through as they become ubiquitous; all useful technology is innovative until it becomes commonplace. Pair the book with his new one ‘The Attention Merchants’ to learn more about how we got to this point in the life of the internet.
  5. Future Shock by Alvin Toffler: I am currently reading this book again and amongst the many quotes that one can pull from this prescient book, one that speaks to the now of communication technology is ‘…but in almost every other communications medium we can trace a decreasing reliance on mass audiences. Everywhere the ‘market segmentation, process is at work’. Another one that is closely related to the premise of The Second Machine Age (above) in the age of AI is ‘there are discoverable limits to the amount of change that the human can absorb, and that by endlessly accelerating change without first determining these limits, we may submit masses of (hu)mans to demands they simply cannot tolerate’. While some of his context might be outdated, the book was written in 1970, the overarching musings (the accelerating pace of change and of information overload) still hold true today. Probably more so.
  6. Technopoly by Neil Postman: The copy of this book I read is actually my wife’s copy from her undergraduate degree days. Apparently, in her major at Stanford, she had to read this and share her views on the perspectives provided by Neil Postman in this book that is very relevant to the current landscape of technology. It’s the most marked book I’ve ever read (she’s studious like that) but that element of it, someone else’s notes, makes it a fantastic read of a great book that focuses on the inequalities that technology brings to society.
  7. The Life of Pi by Yann Martel: This might seem like an odd one to include on here until you read why. I was having a conversation with Jeremy Adelman about this blog post and... you know what, I’ll let him explain more eloquently than I could why this book helps you understand technology (hint: because it helps us understand our biases and we all know our biases seep into the products we build); “few books force you to confront who you are and your perception of situations and trends. We all have filters and lenses through which we perceive the world and our interpretation of our present and future is wholly through these lenses. This is a critical realization if you want to look at technology trends and build a product that is both on trend and lasting in its ability to solve human pains. Life Of Pi truly makes us think about these lenses and biases.
Which books would you add to the list? Let me know in the comments.

Tuesday, July 25, 2017

10 tips for becoming a better programmer

July 25, 2017 0
10 tips for becoming a better programmer


Skilled programmers remain highly valued in the tech world: Developer jobs are typically some of the hardest to fill, and the demand for these types of professionals doesn't seem to be slowing down.
However, both new programmers and industry veterans face several struggles in a world of rapidly-changing technologies, making it increasingly difficult to stay relevant in the field and move up the career ladder, according to Dan Vassallo, a web developer at Vydia. "Newbies and long term hackers alike are constantly striving to perfect the newest hot technology and add another skill to their LinkedIn profiles," he said. "Sometimes this is a good thing, and other times it can have a negative effect."

Here are 10 tips for becoming a better programmer to help you enhance your career opportunities.

1. Let your soft skills do the magic

Interpersonal skills including communication, empathy, and humor are key to setting yourself apart from other qualified programmers when it comes to building a career and moving up the ladder, according to executive coach Debra Benton.
"Charisma, likability, and other soft skills are important," said Jim Baca, a senior Android developer and coach. "No one wants to work with uncharismatic, unlikeable people. These are skills that are just as important as tech skills—in fact, they become more important as your career progresses. These skills garner more opportunities, so don't discount them."
Learning to talk to non-programmers is also a valuable job skill, said Gregory Golinski, a programmer and SEO specialist at YourParkingSpace. "The jargon they use can be very cryptic to other team members who don't know anything about programming, Golinski said. "Programmers should always remember that most people don't know what an array or a function are."

2. Code in real-time, code often

"There is no replacement for coding solutions to real world problems and the practice that comes from these experiences," said Willie Tejada, chief developer advocate at IBM. "What you code isn't as important as coding as frequently as possible and challenging yourself."
This requires putting in the hours to improve your programming skills, said Avi Flombaum, co-founder and dean of the Flatiron School. "Don't just learn how to use something—know how it works," Flombaum said. "Spend more time learning how and why things are built as opposed to just how to use them. Always try to go one layer deeper into the most important concepts."
You can use GitHub to publicly display passing projects or exercises, and have other developers in your network review your code and provide commentary on where it can improve or how you can approach things differently, said Paul Wallenberg, unit manager of technology recruiting services at LaSalle Network.
"Programmers that are on the hunt for a new job must showcase the projects they have worked on," said Manu Singh, a mobile developer at Clearbridge Mobile. "This sets you aside from the competition and shows not only what projects you've worked on, but a deeper look at who you are, how you completed the work, and where you want to go. By putting together a portfolio of your work, you're building your personal brand."

3. Be language agnostic

Learning more than one programming language can dramatically increase career opportunities and income potential, as technology continues to evolve and new languages are developed, according to Tejada. "Language is a tool, so it is critical to learn new ones," Tejada said. It's valuable to have deep experience in a language, but it's also important to know a breadth of languages and pick the right tool for the job."

4. Make friends in Open Source circle

When you contribute to the open source community, it will empower you, Tejada said. "When you contribute to a project, pay attention to the feedback you get from users and other developers," he added. "When you give to the community, make sure you take advantage of the opportunity to receive as well."
Recognize how important it is to interact with your professional community, but also think long and hard about what you want your role to be, said Charlie Robbins, director of engineering at GoDaddy and former member of the board of the Node.js Foundation. "Rather than chasing the notoriety of a 'superstar' developer, make sure you're speaking at conferences, writing blog posts, and engaging in mentorship projects that you actually feel passionate about," Robbins said. "Exchanging ideas and learning new things from your community can help avoid burnout, but only if you're approaching it in a genuine way."


5. Enroll in a local user groups or mentorship programs online

Many user groups will offer mentorship programs, usually pairing up entry level or junior programmers with more senior users of a particular language, often for free, said Wallenberg.
"The thing that has helped me the most in becoming a better programmer has been working with highly skilled programmers," said Antony Vitillo, VR developer and owner of the VR blog The Ghost Howls. "Try to work always with people more skilled than you, this way you'll learn a lot."
This is especially important when first starting out in a programming career, said Brad Davis, IT branch manager at Addison Group. "Look for a larger team, as this ensures that you have senior developers that can help you to grow your abilities," Davis said. "Also, focus on a position where you interact face-to-face with your colleagues. While there are perks to working remote, it's difficult to develop skills without the direct support offered by on-site positions."
Pair programming with another developer is a great way to learn through instantaneous feedback, according to Alyssa Mazzina, developer marketing content writer at Stack Overflow. With this method, one participant writes code, while the other watches the work as it's done. The two switch roles every few minutes, and talk to each other throughout the process. "The practice is will likely set you up for better success as it's a fully immersive learning experience, faster integration into the team and more significant growth as a developer," Mazzina said.

istock-665241970.jpg
Image: iStockphoto/scyther5

6. Develop a side project

A side project may sound daunting, but you should consider starting one just for fun, Mazzina said. "Programming something you're passionate about is crucial to development, and by taking on a side project with no expectations other than to have fun and learn, you'll be surprised at how much you can grow," Mazzina said. "Try learning a new programming language, or build an app to sharpen your skills and broaden your ability."
GitHub is also full of projects both large and small that welcome contributions, said Cynan de Leon, head of data engineering and analytics for Mint at Intuit. "This is a great place to see if someone has already started creating your idea, and see what ways it can be improved," de Leon said. "You also get the benefit of having other people look at what you've contributed, continuing that cycle. It could be something as small as a Sudoku solver, or something as huge as a top-level Apache project. It doesn't matter; if you're passionate about it, go for it."

Check my side project where I built an audio player in NodeJS here

7. Work on a particular skill to specialize

Programming changes very quickly—often, you learn one technology, and by the next week, it's been replaced with something better, said Alex Markov, developer and founder of Refersion. "My advice is to specialize by focusing on a smaller segment of tech, such as database admin, front-end web development, etc.—then keep up with that industry, learn everything, be the best. That's how you'll win at your career," Markov said. "Employers will respect you more when you say, 'I don't know about the other stuff, but when it comes to XYZ, I got your back all the time.'"
If you're struggling to choose a language to begin with, you should pick one and learn it well, Vassallo said. "While we all need to pick up various languages on the path to becoming a programming guru, it pays to really try and shine in one field," Vassallo said. "It's totally fine to be a jack of all trades, in fact, it's welcomed. A master of none has a less than desirable skill set."

8. Take code review seriously

Code review is not just an effective way to catch bugs—it's also a great way to spark discussion and share knowledge between team members, said Tigran Sloyan, CEO of CodeFights. "As the reviewee, be receptive towards constructive criticism and take advantage of your reviewers' experience to create something better than you could have done on your own," Sloyan said. "As the reviewer, stay constructive, but use the opportunity to disseminate best practices and accumulated wisdom, or even learn something new from the code that you're reviewing."

9. Learn more about the business side

Whether you are part of a for-profit or nonprofit organization, your software is empowering a business objective, Sloyan said. Learning how your company makes money and serves customers, and the core competency it has compared to competitors, can help you uncover new approaches and improvements that will support the business side.
"Talk to your colleagues in the business departments and ask tough business questions to your senior executives," Sloyan said. "For example, if you work for an online ads platform whose core technology is personalization of ads, defining and innovating on ad relevancy algorithm will make or break your business." You can also gain the foresight to design a system that can scale with your business quickly, and identify opportunities that may not be apparent to non-technical managers.

10. Read voraciously

Many of the skills needed to be a strong developer are not taught in college, Sloyan said. But a number of books written by developers can give you practical information that may otherwise take years to learn on the job. Sloyan recommends Code Complete by Steve McConnell, Clean Code by  Robert Cecil Martin, and The Mythical Man-Month by Fred Brooks.
For beginners in the field, Flombaum recommends Learn to Program by Chris Pine, Programming Ruby: The Pragmatic Programmers' Guide by Andy Hunt and Dave Thomas, Agile Development with Rails by David Heinemeier Hansson, and Weaving the Web by Tim Berners-Lee.