Narasimhan DevarajanLakshmi

Experienced .Net Developer Looking for a remote position in Multi-threaded Application Development. Computer Science Engineer. Specialist C#, .NET & Performance

Bangalore
Available for hire

Home

On Becoming a Better Programmer A How-to Guide!

Published Feb 11, 2019

Become a Paradigm polygot

In a fast paced industry mere knowledge of programming languages using Object Oriented Programming or Functional Programming isn’t just sufficient. A combination thereof is very much a requim if not a catalyst for alternative or out of the box thinking to solving problems with Programming languages.

Some exercises worth undertaking:

Become a Database polygot

There’s RDBMS. There are NoSQL Databases. We all know this. Getting a grip on more than one Database solution is a key to cracking a career in Data Science or Software Services. There are all sorts of variants to NoSQL :-

  • DynamoDB,
  • bigtable,
  • redis,
  • spanner(developed at google for disturbed transcational use-targeted at enterprises),
  • Neo4j& memSQL(An in memory DB in growing popularity, used by Uber, AKAMAI etc)

Some Interesting Books worth Purchasing:

  • Dmitri Fontaine’s Mastering postgesSQL
  • Baron shwartz High performance MySQL
  • Dynamodbguide.com has an interesting getting started guide on NoSQL DBs using Amazon’s AWS as a primary example.

Become Protocol polygot TCP/IP, HTTP,UDP,FTP

Must know : SSL,TLS,Applayer Intergrations sockets and ports

  • High performance browser networkingRead up RFC 7231 (about 90 pages) first instead of RFC2616(more recent but way too long)
    • (As a general tip find and read RFCs with the most citations on Google search results).
  • Most cited RFC have certain additional resources(or perspectives) to further lookup and explore.(**Lookup most used RFC (or) most cited)

Proficiency with build tooling, packaging and distribution

  • Being able to tweak the tools,build/change whats needed
  • Maven,python packaging
  • MSBUILD, nuget;
  • system.IO.Packaging,
  • Dependency Injection tools/frameworks such as
    • Castle Windsor 
    • Simple injector 
    • Microsoft.Extensions.Dependency injection 
    • Autofac DI containerAdditionally:
  • Write your own build tooling. 
  • Proficient to compile/run multi-file programs

Ability to analyze reason about and debug programs

  • Reading &reviewing code
  • Debug running programs
  • Observability & instrumentation
    • Inculcate observability in your process of writing software.
    • honeycomb.io ‘s Observability Guide.
    • Cindy Sridharan’s Observability Book
  • Bart de Smet’s Pluralsight course on ILSpy is full of good information.
    • takes a look at how C# Language features work under the hood. 
  • Julia Evans’ talk about her building rbspy is the rough equivalent on RoR

Optionally: Read the ptrace manpage.

A good reflection question :-

“How can I reliably answer a question about a system, without prying open the system?”

Deployments infrastructure & devops

  • Linuxacademy.com has a great bunch of hands-on-labs.
  • Capistrano deployment system qwiklabs.com also has similar hands-on-labs.
  • Software Architecting principles and basic scaling techniques.
  • how to design everyday systems-how to use workers,queues and sync processing-
  • how to design a data pipeline-data bricks and data pipeline design guideBooks:

ABILITY TO WRITE TOY GAMES

  • These are good interview skills,
    • For eg. build tetris in an hour.
  • write a bot that plays the game you make-
  • make a game like
    • minesweeper,
    • snake,
    • jumperfrog etc.

ALGORITMIC ANALYSIS ABILITY AND SOLVING ALGO PROBS

  • ability to solve problems recursively-understand the master method to analyze recursive solutions
  • Resources:Interiew cake
  • Tim Roughgarden’s: Design and analysis of algorithms (coursera)