How Does an Engineer Create a Programming Language?

Besides being a software engineer, Marianne Bellotti is also a kind of technological anthropologist. Back in 2016 at the Systems We Love conference, Bellotti began her talk by saying she appreciated the systems most engineers hate โ€”โ€messy, archaic, duct-tape-and-chewing-gum.โ€ Then she added, โ€œFortunately, I work for the federal government.โ€

At the time, Bellotti was working for the U.S. Digital Service, where talented technology workers are matched to federal systems in need of some consultation. (While there, sheโ€™d encountered a web application drawing its JSON-formatted data from a half-century-old IBM 7074 mainframe.)

The rich experiences led her to write a book with the irresistible title โ€œKill It with Fire: Manage Aging Computer Systems (and Future Proof Modern Ones).โ€ Its official web page at Random House promises it offers โ€œa far more forgiving modernization frameworkโ€ with โ€œilluminating case studies and jaw-dropping anecdotes from her work in the field,โ€ including โ€œCritical considerations every organization should weigh before moving data to the cloud.โ€

Kill it With Fire by Marianne Bellotti - book cover

Bellotti is now working on products for defense and national security agencies as the principal engineer for system safety at Rebellion Defense (handling identity and access control).

But her latest project is a podcast chronicling what sheโ€™s learned while trying to write her own programming language.

โ€œMarianne Writes a Programming Languageโ€ captures a kind of expedition of the mind, showing how the hunger to know can keep leading a software engineer down ever-more-fascinating rabbit holes. But itโ€™s also an inspiring example of the do-it-yourself spirit, and a fresh new perspective on the parsers, lexers and evaluators that make our code run.

In short, itโ€™s a deeply informative deconstruction of where a programmerโ€™s tools really come from.

Going Deep

In one blog post, Bellotti invited listeners to โ€œstart this strange journey with me through parsers, grammars, data structures and the like.โ€

And it is a journey, filled with hope and ambition โ€” and a lot of unexpected twists and turns. โ€œAlong the way, Iโ€™ll interview researchers and engineers who are active in this space and go deep on areas of programming not typically discussed,โ€ the podcast host promised. โ€œAll in all,  Iโ€™m hoping to start a conversation around program language design thatโ€™s less intimidating and more accessible to beginners.โ€

But the โ€œMarianne Writes a Programming Languageโ€ podcast also comes with a healthy dose of self-deprecation. โ€œLetโ€™s get one question out of the way,โ€ her first episode began. โ€œDoes the world really need another programming language? Probably not, no.โ€ But she described it as a passion project, driven by good old-fashioned curiosity. โ€œI have always wanted to write a programming language. I figured I would learn so much from the challenge.โ€

โ€œIn an industry filled with opinions, where people will fight to the death over tabs -vs.- spaces, there isnโ€™t much guidance for would-be program language designers.โ€

โ€”Marianne Bellotti, software engineer and podcast host

Fifteen years into a sparkling technology career, โ€œI feel like there are all these weird holes in my knowledge,โ€ Bellotti told her audience. And even with the things she does know โ€” like bytecode and logic gates โ€” โ€œI donโ€™t have a clear sense of how all those things work together.โ€

In the podcastโ€™s third episode, Bellotti pointed out that, โ€œfor me at least, the hardest part of learning something is figuring out how to learn it in the first place.โ€ She discovered a surprising lack of best-practices documents, she wrote in an essay in Medium. โ€œIn an industry filled with opinions, where people will fight to the death over tabs -vs.- spaces, there isnโ€™t much guidance for would-be program language designers.โ€

Still, her podcastโ€™s first episode showed the arrival of those first glimmers of insight. โ€œEven knowing very little upfront, I had a sense that in order for a programming language to work, there had to be some sense of cohesion in its design.โ€

Where to Begin?

Her Medium post cited a 2012 article titled โ€œProgramming Paradigms for Dummies: What Every Programmer Should Know,โ€ which offers a taxonomy of language types based on how exactly theyโ€™re providing their abstractions. That article apparently got her thinking about how exactly a programming language helps communicate the connections that exist between its various data structures โ€” which led to more insights. (In a later podcast, Bellotti even says โ€œtechnology suggests to its user how it should be used.โ€)

โ€œEventually I came to my own conclusions,โ€ she wrote in her Medium article. To be successful at creating her own language, she realized that she needed to think of  programming paradigms like object-oriented or functional programming โ€œas logical groupings of abstractions and be as intentional about what is included and what isnโ€™t.โ€

Bellotti is also trying to design a language that will work for her specific needs: to know how likely certain types of problems are in a given system, to achieve model resilience. But on her first podcast episode, Bellotti acknowledged that she still had to begin by typing, โ€œHow do you design a programming languageโ€ into Google โ€”and was surprised by how little came up. (Although she did discover โ€œthereโ€™s a whole world of obscure experimental languages that appear in research papers, rack up a host of citations, and never touch an actual computer other than their inventorโ€™s.โ€)

โ€œI feel like Iโ€™ve been struggling to hang pictures around my home and one day someone knocks on my door and introduces me to the hammer,โ€

โ€”Marianne Bellotti, software engineer and podcast host

So where to begin? Avoiding the standard dry collegiate textbooks like โ€œCompilers: Principles, Techniques, and Tools,โ€ she instead found her way to the book Writing an Interpreter in Go, a book which by necessity also created its own programming language (a modified version of Scheme called Monkey) for its interpreter.

That bookโ€™s author, Thorsten Ball, became her podcastโ€™s first guest, explaining that his language was not so much designed as experimented into existence. (Later, other people suggested something similar โ€” that Bellotti โ€œpick something you like in another language and copy the implementation to start, because figuring out all the edge cases from scratch is really hard.โ€)

In that first podcast episode, Bellotti explained her concern that โ€œtiny little design decisions I donโ€™t even realize Iโ€™m making could have dramatic impactsโ€ฆ it does seem to be the case that programmers create languages without being able to fully anticipate exactly how they will be used or how technology will change around them.โ€

Things Get Complicated

There are moments where it all sounds so simple. (โ€œWhat youโ€™re doing when you write a programming language is actually writing a series of applications that take string input and translate it into something the machine can execute.โ€)

But things get complicated pretty quickly, and by episode three Bellotti started to see a pattern: โ€œConfronting what feels like a tidal wave of information is becoming an all too familiar feeling on this project.โ€ Yet, while considering a need for her languageโ€™s source code-interpreting parser, she realized that parsers can be auto-generated โ€” as long as she can supply that tool with the necessary grammar rules.

โ€œI feel like Iโ€™ve been struggling to hang pictures around my home and one day someone knocks on my door and introduces me to the hammer,โ€ she told her podcast audience.

She ends up talking to a linguist who studied under Noam Chomsky, who refers her to another linguistics professor, who begins by discussing whether language can be learned through the brute-force assimilation of machine learning, and ends up explaining why Chomskyโ€™s โ€œcontext-free grammarโ€ ultimately became the basis for programming languages and compilers.

But there are resources to discover. Along the way, Bellotti found a Reddit forum about programming language design. (โ€œThis subreddit is full of great stories and people will give detailed explanations and encouragement, which is rare on the internet these days.โ€) Sheโ€™s also found a forum for people building Domain Specific Languages.

By December, sheโ€™d received a comment from a grateful listener who was also writing their own programming language, and was glad to find a relevant podcast. And Bellotti acknowledged in a response that her whole journey โ€œhas been so much fun so far.โ€

Progress is clearly being made. By episode 12, Bellotti considered how hard it would be to add modules to her language. (โ€œFrom my vantage point, being able to split a system specification into smaller parts means you get to reuse those parts and build progressively more complex systems that are in easily digestible chunks.โ€) And thereโ€™s also already an empty repository on GitHub thatโ€™s waiting expectantly for the code to arrive.

Then, in mid-April Bellotti announced that episode 12 would be the last one โ€œfor a while. Iโ€™ve made some design decisions that I feel really good about, but itโ€™s clear that the only way to validate them is to write code and try things out.โ€

Sheโ€™s also spending some time researching how to optimize her compiler, โ€œBut really, I just need to just be heads-down, hands-on-a-keyboard for a while on this.โ€

And so, the podcast has entered a productive hiatus, leaving listeners with this tantalizing promise.

โ€œIโ€™ll be back in a couple of months to let you know how that went.โ€

How to be a Full Stack Developer?

Before getting into the topic, “how to become a full stack Java developer?” or “how to become a full stack Python developer?”, we learn what is Full Stack development. We are living in a virtual world. We are solving every problem in this virtual world with the help of softwares like some solution. This software contains multiple layers. We have Presentation layer, Business layer and Database layer. The presentation layer is something where the user interacts. For example, if we are going to hariyali.in, we are accessing the front page of the website. That is the presentation layer. We can also say app here instead of website. If we are going to WordPress app, the page that comes first is the presentation layer. Then we are writing an article/a blog and then publishing it or saving it as a draft. All these processing part runs in the server which contains the business logic. As our requirements change, the business logic will also change. And then we have a database layer where we will put our data. The data that we put in should be stored somewhere. That’s why we have a database layer. Now a question arises. If we want to build this application, what are the technologies should we learn?

If we talk about industry, for different layers we have different professionals to work with it. We have experts in presentation layer. We have experts in business layer. As well we have experts in database layer. A Java developer basically works with the business layer. Now a question may arise. Why not presentation layer? Presentation layer can be done by people who are creative. Because he/she must provide the users a good looking UI with a good UX and to build a good UI with good UX, he/she needs creativity. He/she must understand the users; and colour mapping as well. A presentation layer expert must know HTML, CSS, JavaScript. Those are the technologies used in front end. One can also use Angular, React. A business layer expert must know PHP, Java, C sharp, Python. Nowadays JavaScript is also used in business layer. For Database layer, we need experts with knowledge in Oracle, MySql and  NoSql.

MongoDB, ExpressJS, AngularJS and nodeJS are the MEAN stack used. With the help of stack we can build the entire software. What is Stack? Stack simply means one over the other. We have the Presentation layer which communicates with the Business layer which communicates with the Database layer. All these can be done using Stack.

We have seen that there are experts working with every layer. But nowadays there are companies that position a full stack developer. From sta rt to end, everything will be done by him.
The advantages of having a full stack developer:

  • There is no communication gap between teams.
  • The full stack developer is the Jack of all technologies.

But there is also a drawback of having a full stack developer. He is the Jack of all technologies but master of none. But that’s fine. Working on more projects and spending more time with technologies make him trained.

If you want to be a full stack developer, learn front end(Presentation layer) then get into technologies used in business layer and then into database layer. The thing that differs for a full stack Java developer and a full stack Python developer is the business layer. For a full stack Java developer, the business layer will be of Java. For a full stack Python developer, the business layer will be of Python. Just stick to one technology (language) and upgrade on that. You don’t need to learn every language. All the best.

How to learn coding FOR Beginners without any background?

First thing to understand is that it can be done. For the specifics and how to’s, one needs to have an objective in mind.

So,

  • Choose a path and decide a goal. If one is just starting out, choose something general like developing websites or mobile applications or desktop software etc. Find out what computer languages and technologies are used in your path of choice. This especially helps you avoid a “What next now?” stage in your learning.
  • Start by doing little tutorials from youtube or some websites. Many of the languages have online “Language X in 20/15 minutes”. Once youย  are done with two or three (or as many that makes you comfortable) of these, you will have an idea of the syntax and keywords of the language: the rules that govern its writing. This will definitely give a feel of whether that is the language and its workings; some languages may be difficult as a beginner, and some others might feel more intuitive (more on that later in the article).
  • Next, find a good book or a website along the lines of “Language X for beginners”. There are many out there, free as well as paid but free is preferable as there is not a difference anyways. The internet is vast resource in itself. Try and look up reviews and opinions from people who have used the book before using it yourself, but try not to get stuck up on choosing a book, since they mostly cover the same content, only differ in style. The book will help on the core concepts of programming logic and provide basic examples, and get you started on your programming path in a specific language, and equip you with knowledge of core programming principles and algorithms that can be applied to other languages in some similar way.
  • DO NOT COPY PASTE CODES. A good habit is to write something different from what the presolved example says. So for example if the book tells the output “Hello World!”, make it say “Good Morning, People of Earth!”; if the example is to write a program that takes any name as input and outputs “Hello (Name)”, make it take the age instead, or the hometown. This helps counter the urge to copy code and also helps to ingrain core concepts in memory. Also, try to do supplementary exercises from the internet every time after learning a new topic, to see different ways in which it can be applied, and the various problems that might occur while implementing it.

By the time that book is finished using the techniques suggested above, one can attain reasonable proficiency in programming, and can now write own programs from scratch (basic programs).

But if there is no specific objective behind learning coding, or if the learning is just for programming in general, one of two paths written below is recommended:

  1. Learn C, C++ or Java

These above-mentioned languages are more technical and strict, making them a little difficult to master. Some programmers are actually of the opinion that C should not be in the list of languages for beginners and starters, it is a fair thought but it can be argued because C forms core for most other programming languages so mastering C at first can make learning other languages an easy task. The main bummer for many people is the dynamic aspect of c and c++. Competitive programming is also a thing which a beginner can jump into to learn things in a more quick and application oriented way.

2. Learn Ruby or Python

These have easy and more intuitive syntax and can help to get up and walk quickly in programming. They are also very similar. These are not only simple but have wide usability and demand in the market. From machine learning to AI to web development, these languages have a good future, beside the fact that they are heavy to run and compile but that doesnt matter.

All in all, START NOW and BE CONSISTENT. Three months is a lot of time if there is focus and value of time.


Cryptocurrency

What is this crytocurrency that everybody is talking about? In simple words, it is digital currency in encrypted form. Money transaction is processed and validated through data mining. As of now, using crypto currency is a very complex process. Still, it is becoming popular in recent times worldwide.

Here, money transaction is carried out between two parties only.Hence there is no third party involvement. After validation and processing through data mining,it is kept in public ledgers but the transactions are kept confidential.Once a transaction is validated, miners get this crypto currency as reward.

Litecoin, Bitcoin, Ethereum ,Pipple are some examples of cryptocurrency. Out of this, Bit coin is the most popular crypto currency.

Cryptocurrency works on Block Chain Technology, which is a decentralised technology spread across many computers that manages and records transactions.

There are more than 4000 cryptos worldwide as of now. It’s users are called miners. This virtual currency is exchanged over the internet and uses cryptography as a means of security. There is no central authority to manage this system and it is immune to government interference.It is highly confidential and totally decentralised person to person payment method. All the transactions and accounts can be traced but the owner accounts are usually not easily traceable.

International money transfer can also be done through crypto. As it is becoming popular nowadays, it’s value is getting increased. Some people even use it for investment purposes. A large number of individuals and businesses have started using this. Many online websites also accept virtual currencies as payment.

Bitcoin is a premier crytocurrency created by Satoshi Nakatomo on 31 st October, 2008. It is pseudonomous and is controlled by users called bitcoin miners. These miners use different computer program and resources to solve highly complicated mathematics problems and get a number of bitcoins in exchange. They do this by verifying transactions and adding them to a public ledger called Blockchain. It holds the transaction history of all bitcoins in circulation. These miners keep the network secure and ensure that all systems are synchronized together. Those miners who help to accurately track the transactions and maintain network are rewarded with cryptos.

Ripple or XRP is an open source digital payment platform. Here money can be transferred in actual currency or cryptocurrency. XRP is used as a bridge currency to settle cross border payment in a faster and cheaper manner.

The cryptocurrency has neither been made legal nor banned. In India, they are not in use legally. Experts are advising on shutting down its trading. Likewise, other major countries are thinking of banning cryptocurrencies. So we have to wait and watch if the crypto will become the future of transactions or goes away for good.

Decoding the Indian Programmer

In India, the new millennium began to fundamentally change every aspect of the country with much media frenzy around the prospect of information technology. As a result, most college-going student’s ‘well-meaning’ parents compelled their children to undertake computer science and related study fields, independent of their interest.

ย With technological advancement foraying into our economic, political and social lives, demand for such graduates is substantial around the world. An estimated half a million jobs will be developed in this field over the coming decade, and by 2024, nearly three-quarters of the science, technology, engineering and math (STEM) positions will be over computer-related occupations, predict reports. More than half of the world’s STEM graduates are produced by China, India, the United States and Russia and so most computer science students are coming from those countries.

Portrait Of Confident Indian Programmer At His Workplace Stock Photo,  Picture And Royalty Free Image. Image 74810023.

There has also been a significant rise in student enrolment in computer science graduate programs in recent years, tripling in some of these countries. Do these growing numbers, however, also turn at the end of the program into quality graduates?

Talent shortages are extreme in India’s IT and data science environment with a survey reporting that 95 per cent of the countryโ€™s engineers are not qualified to take on software development jobs. According to a report by Aspiring Minds employability Survey Company, only 4.77 percent of applicants can write the required logic for a program โ€” a minimum criteria for any programming work.

Indian IT companies need to fire incompetent programmers

More than 36,000 engineering students from IT-related divisions of over 500 colleges took Automata โ€” a software development skills examination focused on Machine Learning โ€” as well as more than two-thirds could not even write a piece of code that compiles. The study further noted that while more than 60% of candidates can’t even write compiling code, only 1.4% can write technically correct and usable code.

The disparity in employability can be due to alternating learning-based methods rather than designing programs for different problems on a computer. There is also a shortage of good programming teachers, as most good programmers are getting jobs at good salaries in industry, the study reported.

Furthermore, programming skills for Tier III colleges are five times lower than those of Tier 1 colleges. According to a report, Sixty-nine per cent of the top 100 university candidates are able to write a compilable code versus the rest of the colleges where only 31 per cent can write a compilable code, the report said.

Debate about the standard of Indian student programmers is a never-ending one. Most developers worldwide are said to start coding at a shockingly young age. However, many will be surprised to know that in India only one in ten begins coding before age 15. Elsewhere the number is three out of ten.

When too many books are offered to a student to read but not enough time to engage in practical practice, then what will he learn?

In addition, students are often required to take assessments demonstrating only their memory skills and not their real skill or information. The amount of new technical data is said to be doubling every 2 years. But most educational institutions are still teaching Java, Turbo C++, and C++ pre-standardized. So, for students starting a 4-year engineering degree, their third year of college outdates half of what they learn in their first year.

What can be done to resolve the problem?

Social networking site LinkedIn recently said that in the coming years, skills such as web creation and user experience design will be highly in demand. It is therefore necessary to design an academic curriculum tailored to meet the needs of the generation to come and to make them IT fluent.

To this end, educators use different techniques to combine education with technology, and programming can be considered as one of the finest ways of doing this.

Early technology exposure has reshaped how children interact, socialize, develop, and know. Such digital natives think and process knowledge differently, due to increased engagement with technology. Today it is extremely important that every child transitions from engaging with technology to being an active co-creator.   

Computational learning incorporates mathematics, logic, and algorithms, and introduces innovative solutions to problems for youngsters. Computational reasoning shows us how to deal with big problems by splitting us into a series of smaller, more manageable issues. This approachโ€™s applications go beyond composing code and structured programming. The analytical method is used in areas as diverse as biology, archaeology and music.

Hence, it has become extremely crucial to instill knowledge about Computer Programming from a very young age in the children of our country. Because, only then we can dream of leaving the mark of our nation in renowned global competitions like The ACM-ICPC (International Collegiate Programming Contest).