Posts tagged "programming language"

Rust

The Future of Rust

April 23, 2019 Posted by Programming 0 thoughts on “The Future of Rust”

Rust was first announced in 2010 as an alternative to C/C++. As we mentioned in one of our blog articles, the systems language promises:

 C++ control without all of the safety issues like segfaults, null pointers, buffer overflows, and many other security nightmares that C++ developers have to wrestle with. Its unique selling point is the checking system that yells out error messages on compilation time, which the aging C++ language does not do. Errors seem like a minor enhancement from the viewpoint of web developers, but for low-level programmers, being warned about improper memory allocation can mean the difference between broken code and production-ready code.

Today, Rust isn’t the only C++ alternative in town. According to 2019’s Stack Overflow survey, 8.8% of professional developers primarily used Go while only 3% percent primarily used Rust. Still, the Rust community is alive and well. This year, the team put out a call for blog posts to be written about the systems programming language. They got 73 posts in response. The theme of these posts spelled that the future of Rust would be one of stability and slow progress. Below are some examples of these posts taken from Rust’s GitHub age.

 

I believe not only that the processes and institutions of Rust need to be shored up, but that special attention should be paid to people. Ultimately, people are what drives the language forward, whether it be through design, implementation, or outreach. If no people want to work on Rust, or are blocked from working on Rust, the language will stagnate. …

This is not to say that there should not be any movement on improving features or process. Just that their effects and costs should be measured in people, as well as in technology.

In this post, I’ll refer to a highly simplified maturity life cycle with three stages: research, development, and polish. Different parts of the Rust ecosystem are at different levels of maturity. It’s important for effort to match the actual stage in the life cycle, ideally to push it to the next. For example, I consider the language to mostly be in the “polish” stage. Continuing to treat it as research would bring dependent types, virtual structs, etc., which would be interesting but disruptive. Conversely, we don’t know exactly what we want for GUI, so trying to drive that to a standardized solution too early will likely get us to a suboptimal place.

Many mature products have alternating releases focused on new features, then stabilization… 2018 has seen a lot of new features, so I think it’s time for a stabilization phase.

If you’re familiar with the history of Rust you might be confused with a call to stabilization. After all, Rust 2015 (a.k.a 1.0) was all about stabilization and the team has actually done a pretty good job with achieving this goal. So what gives?

While Rust 2015 defined stabilization around language backward compatibility, it’s time for the language, the tooling, the ecosystem and the governance to stabilize. Each of these characterize stability in a different way.

The Rust project has been growing like a startup for the last several years. This has some good aspect – “hockeystick curves” – but it has some very bad aspects as well. If this project is going to have a chance of sustaining itself in the long term, we need to get real about dealing with the organizational debt we have accumulated. I think we have serious problems at every level of our organization that need to be addressed, and I’m going to enumerate them from my personal perspective.

 

The rust team categorized stability or maturity into three categories:

  • Governance: improving how the project is run
  • Finish long-standing requests: closing out work we’ve started but never finished
  • These requests include the Cargo team and custom registries; async/await, specialization, const generics, and generic associated types; and custom allocators
  • Polish: improving the overall quality of the language and tooling
  • Polishes include improving compiling times, improving wasm support, and improving specs

 

Conclusion

The importance of language maturity is crucial now because the current cost of using Rust is overcoming a learning curve. Making sure that the language is mature would mitigate the need to lose time fiddling with limited support. As one blogger mentioned, “…Rust 2021 should be about Rust’s maturity.” He went on to define what maturity is. ‘To me it means that for a programmer in 2022, Rust is a safe choice with many benefits, not a high-risk/high-reward choice. Choosing Rust for a project should be a competitive advantage (which I think it is today), but it should not require investment in libraries, training, or research.”

 

Please follow and like us:
0
Microsoft's Bosque

Microsoft Releases Bosque Programming Language

April 17, 2019 Posted by News 0 thoughts on “Microsoft Releases Bosque Programming Language”

In a research paper written by Mark Marron and recently published by Microsoft, Marron introduces a new paradigm that involves “lifting the model for iterative processing away from low-level loop actions, enriching the language with algebraic data transformation operators, and further simplifying the problem of reasoning about program behavior by removing incidental ties to a particular computational substrate and indeterminate behaviors.” This new paradigm is termed regularized programming and is supposed to revolutionize software development in the same way structured programming and abstract data types did in the 70’s.

Marron claims that these improvements will come in the form of better “software quality, programmer productivity, and compilers/tooling.” The Bosque language is then used as an example of a programming language built with a raguarized model in mind, giving it the ability to “[eliminate] major sources of errors, [simplify] code understanding and modification, and [convert] many automated reasoning tasks over code into trivial propositions.”

 

What is Bosque?

Bosque is a combination of TypeScript in syntax and ML and JavaScript in semantics. In short, the language will be familiar to anyone who’s ever built a front end app. The language includes nominal types, structural types, and combination types.

function nsum ( d : I n t , . . . a r g s : L i s t [ I n t ] ) : I n t {
return a r g s . sum ( d e f a u l t =d ) ;
}
function np ( p1 : I n t , p2 : I n t ) : {x : I n t , y : I n t } {
return @{x=p1 , y=p2 } ;
}
/ / c a l l s with e x p l i c i t arguments
var x = nsum ( 0 , 1 , 2 , 3) ;
var a = np ( 1 , 2) ;
var b = np ( p2 =2 , 1) ; / / same as a
var c = np ( p2 =2 , p1 =1) ; / / a l s o same as a
/ / c a l l s with spread arguments
var t = @[1 , 2 , 3 ] ;
var y = nsum ( 0 , . . . t ) ; / / same as x
var r = @{p1 =1 , p2 =2};
var d = np ( . . . r ) ; / / same as a

 

What differentiates Bosque from JavaScript and its supersets is the fact that it provides “specialized bulk algebraic data operations and integrated support for none (or optional data) processing.”

Bulk Algebraic Data Operations

Marron gives examples of both bulk algebraic data operations and none processing. Here’s how he outlined what bulk algebraic data operations look like when used with Bosque:

 “The bulk algebraic operations in BOSQUE start with support for bulk reads and updates to data values. In addition to eliminating opportunities to forget or confuse a field the BOSQUE operators help focus the code on the overall intent, instead of being hidden in the individual steps, and allow a developer to perform algebraic reasoning on the data structure.”

 @[7 , 9]
(@[7 , 8 ] ) <~(0=5 , 3=1) ; / / @[5 , 8 , none , 1]
(@[7 , 8 ] ) <+(@[5]) ; / / @[7 , 8 , 5]
(@{ f =1 , g =2})@{f , h } ; / / @{f =1 , h=none }
(@{ f =1 , g =2}) <~( f =5 , h =1) ; / / @{f =5 , g =2 , h=1}
(@{ f =1 , g =2}) <+(@{ f =5 , h =1}) ; / / @{f =5 , g =2 , h=1}
Baz@identity ( 1 )@{f , h } ; / / @{f =1 , h=t ru e }
Baz@identity ( 1 )@{f , k } ; / / error
Baz@identity ( 1 ) <~( f =5) ; / / Baz@{f =5 , g =1 , h=t ru e }
Baz@identity ( 1 ) <~(p =5) ; / / error
Baz@identity ( 1 ) <+(@{ f =5}) ; / / Baz@{f =5 , g =1 ,

 

“None” Processing

In Bosque, none values are equivalent to null or undefined. Rather than following JavaScript’s truthy coalescing, Bosque uses both  “elvis operator support for all chainable actions and specific
none-coalescing. ”

@{}.h / / none
@{}.h . k / / error
@{}.h ? . k / / none
@{h = {}} . h ? . k / / none
@{h={k =3}}. h ? . k / / 3
f u n c t i o n d e f a u l t ( x ? : I n t , y ? : I n t ) : I n t {
return ( x ? | 0) + ( y ? | 0) ; / / d e f a u l t on none
}
d e f a u l t ( 1 , 1) / / 2
d e f a u l t ( 1 ) / / 1
d e f a u l t ( ) / / 0
f u n c t i o n check ( x ? : I n t , y ? : I n t ) : I n t ? {
return x ?& y ?& x + y ; / /

Atomic Constructors

The language also uses atomic constructors to regularize development. This is achieved by using  “direct field initialization to construct entity (object) values.”

concept Bar {
f i e l d f : I n t ;
f a c t o r y d e f a u l t ( ) : { f : I n t } {
return @{f =1};
}
}
e n t i t y Baz p r o v i d e s Bar {
f i e l d g : I n t ;
f i e l d h : Bool = t ru e ;

 

 

A Side By Side Comparison

It’s when JavaScript and Bosque are compared side to side that you can see what Marron means by stripping away “accidental complexity.” As a regularized programming language, Bosque aims for a declaritiveness and conciseness not found in JavaScript and other structured programming languages.

 

JavaScript vs Bosque

 

Conclusion

Bosque presents an interesting paradigm shift in a crowded field of programming languages. It will be worthwhile watching how the language matures as an ecosystem of tooling develops around it.  On their website, Microsoft has made the new programming language available to open source contributors under an MIT license. You can explore Bosque in Microsoft’s GitHub repo.

 

Please follow and like us:
0

Typescript 3.4 Releases With Faster Builds

April 1, 2019 Posted by News 0 thoughts on “Typescript 3.4 Releases With Faster Builds”

 

In a previous post, we talked about the hottest technologies in web development; TypeScript was one of them. TypeScript, in essence , is the messiah of front end scripting languages brought down to rescue those who’ve been pulling their hair developing with JavaScript. In reality, TypeScript introduces static types, which remove the quizzical undefined errors many JavaScript developers have become accustomed to. Instead, you get cleaner errors and cleaner, more document-able code.

Now, the TypesSript faithful have a new version release and its following updates to tinker with. Daniel lays out some of the new features in depth on Microsoft’s dev blog. If you’re attention span is short, this post will serve as a TL;DR of Daniel’s post.

 

New –incremental flag makes for faster builds

Instead of running tsc –watch and letting that run, you can use –incremental to save information from the last compilation. TypeScript will look in .tsBuildInfoFile(which can be renamed using –tsBuildInfo flag) for the information  This is great for cold builds.

 

Higher order type inference

Previously, TypeScript couldn’t allocate types to functions containing other generic functions. TypeScript would default to checking the constraints of the enclosed generic function rather than assigning a type to the higher order function. The feature is given extended attention here.

 

ReadonlyArray and readonly tuples are improved

  • A ReadonlyArray is actually a ReadonlyArray now. Or you can just write it as readonly
  • readonly tuples now have the same read only benefit as readonly arrays
  • You can now map readonly arrays and tuples

 

Const Assertions

This negates JavaScript’s default mutability and sets object literals, arrays, and tuples to readonly. No literal can be “widened” when affixing as const to the literal.

 

Some extra points about the new TypeScript 3.4 release. These changes have the possibility of breaking your code.

  • There is now type-checking for EcmaScript’s globalThis, which means that top level this is no longer typed as  any, but typed as typeof GlobalThis
  • return types are contextualized within argument types rather than being literal types of their own
  • variance of types are now correctly checked when keyof is used, so users flagging –strictFunctionTypes to off in previous builds while using type parameters only in keyof may experience break in code.

 

 

 

Please follow and like us:
0

What Is the C – – Programming Language?

March 20, 2019 Posted by Programming 0 thoughts on “What Is the C – – Programming Language?”

C – – is a compiler language created by Simon Peyton Jones and Norman Ramsey that’s intended to be the output of compilers used in high level languages.  A great way to remember the purpose of the language and its relation to C is to think of it as a low level C, hence the double minus. Version 2 of the C – – specification defines the purpose of the language as follows:

  1. C-- encapsulates compilation techniques that are well understood, but difficult to implement. Such
    techniques include instruction selection, register allocation, instruction scheduling, and optimization
    of imperative code with loops.
  2. C-- is a language, rather than a library (such as gcc’s RTL back end). As such, it has a concrete syntax
    that can be read by people, and a semantics that is independent of any particular implementation.
  3. C-- is a portable assembly language. It is, by design, as low-level as possible while still concealing
    details of the particular machine architecture.
  4. C-- is independent of both source programming language and target architecture. Its design accommodates a variety of source languages and leaves room for back-end optimization, all without upcalls
    from the back end to the front end.
  5. C-- is efficient—or at least admits efficient implementation. So C-- provides almost as much flexibility
    and performance (assuming a good C-- compiler) as a custom code generator.

C-- is not related to C, as some may be lead to be believed. C-- is much more related to assembly in that it exposes the word size, byte size, and “endian.”  This means that you can’t easily portC-- code written for one architecture to another architecture as you would be able to with C++, for example. The language also does not come with all the bells and whistles of a platform like JVM or LLVM. JIT compilers and libraries aren’t a feature ofC--. Rather, the language sacrifices features found in higher level languages for versatility. WithC--, a developer can develop their own code generator from the ground up.

Here’s an example of how a developer might implement recursion in C--:

/* Ordinary recursion */
export sp1;
sp1( bits32 n ) {
bits32 s, p;
if n == 1 {
return( 1, 1 );
} else {
s, p = sp1( n-1 );
return( s+n, p*n );
}
}
/* Tail recursion */
export sp2;
sp2( bits32 n ) {
jump sp2_help( n, 1, 1 );
}
sp2_help( bits32 n, bits32 s, bits32 p ) {
if n==1 {
return( s, p );
} else {
jump sp2_help( n-1, s+n, p*n );
}
}

If you’ve ever looked at assembly code, you’ll notice the more semantic C-- version of the jump command and the explicit reference to memory with bits32 as opposed to a type reference like int. Though C-- is not C, it’s obvious that it borrows heavily from C in terms of syntax. It’s just important to keep in mind that the strong similarity is merely superficial. The maintainers of the language explain the reasoning behind making C--‘s syntax similar to that of C:

“Many compiler writers have significant experience reading low-level C code; making the syntax C-like helps them benefit from this experience. There are a number of syntactic tweaks in C-- that make it easier to generate than C; for example, every operator has a prefix form, so it’s not necessary to use infix operators.”

 

In the end, the next time you hear a C-- joke between compiler engineers, you’ll know what they’re talking about.

 

Resources:

If you want to learn how to develop in C--The C-- Language Specification Version 2.0 is worth a read.

Please follow and like us:
0

Is Block Based Programming Only For Kids?

March 1, 2019 Posted by Programming 0 thoughts on “Is Block Based Programming Only For Kids?”

I stumbled across a picture of a conference being held about block based programming as I was scrolling through my Twitter feed. The image struck me as odd, and then I had to question why that image appeared odd to me. I came to the conclusion that I’ve always thought of Scratch,(an example of a block-based app) as a toy that a pushy engineer might give his kid for Christmas.

Then, of course, I had to question that notion by thinking about ways in which block based programming may service those who aren’t kids. That’s when I thought of another block-based program called Game Maker. I once used that program as a not-so-young-kid to make a rudimentary side scroller game. It was my first introduction to programming and it made me appreciate the need to create logic to “make stuff happen,” for lack of better words.

You don’t need to be a child to gain validation from mastering simple concepts before moving on to more complex concepts. For adults who want to start programming and are frightened by the prospect of dealing with logic and symbols, perhaps block based programming can build confidence by making that adult think like a programmer.

Instead of using arcane languages like C to teach young students how to be a developer, these concepts can be taught using block based programming. The low barrier to entry will allow students from both artistic and mathematical backgrounds to participate in these courses.

Young high school students may be surprised to find out that front end development requires an eye for design and drafting, skills they may have required in their studio art courses. Using apps like Scratch, teachers can separate students into teams and have them develop projects of their own following AGILE or SCRUM methodologies. They could then present their final project like they would in an Economics class.

All of this would be possible because you wouldn’t have to deal with a language that requires extensive practise to master. Students that master the easier to learn block based language could then move on to real world languages. They may even go on to major in Computer Science while minoring in Studio Art once they get to college since their experience in high school taught them that knowing design principles may earn them a job as a Front End Developer.

 Of course, block based programming isn’t perfect. Textual languages come with their own host of issues that years of experience in block based programming won’t teach you. The point here isn’t that you have to learn block based programming to be able to grasp programming languages, the point is that some young adults can benefit from having their first introduction to programming simplified.

 

Please follow and like us:
0

17 Programmers Tell You What They Hate About Their Favorite Programming Language

February 25, 2019 Posted by Programming 0 thoughts on “17 Programmers Tell You What They Hate About Their Favorite Programming Language”

 

No programming language out there is perfect. Like a spouse, friend, or cousin, there’s always something to nitpick. Whether it’s the absence of types in JavaScript which may necessitate Typescript for some or the buffer overflows of C++, these flaws or quirks give these languages identity. They are the stuff of legendary discussions when, for example, team members tell their tales about how they had to slay the callback hell they found themselves in by modularizing their code. To produce more discussions on this topic, we’ve scoured the internet and found what 13  developers dislike about their programming language of choice.

 

Frederick Creemers

 

In Python, if you write multiple strings adjacent to each other, Python concatenates them. For me, this often leads to annoying bugs like

l = [ “A”, “B” “C”, “D” ] print l # prints [“A”, “BC”, “D”]

 

Pert Soorman

 

When you see that one article saying that “this language X[PHP] is so dead!” and it makes you doubt your life choices.

 

Casey Brooks

 

In Java and Kotlin, I usually create literal arrays with each item on a new line and all columns lined up nicely. To add a new item, I can then just copy any line and change what I need. To edit all items at once I just add a carat at the beginning of each line and off I go.

EXCEPT FOR THE LAST LINE WHICH DOESN’T HAVE A COMMA.

val items = arrayOf( Item(1, “One”, 1.1), Item(2, “Two”, 2.2), Item(3, “Three”, 3.3), Item(4, “Four”, 4.4), Item(5, “Five”, 5.5) // <– I want to put a comma here so badly! )

 

Martin Becker

 

For me I would say in ruby how easy it is for nil to passed around which then causes can’t do #x for nil and then you’re like, “why is it nil?” it’s even worse when you get nilin weird strange places.

 

Doshirae

 

In Ruby, the fact that the normally-named filter function is named select or find_all is really annoying.

 

And oh gosh way too many methods for the objects that is insane. You can easily cut it down to 2 times less because there is a lot of aliases too.

 

Antonin Januska

 

Golang is one of my favorite languages and the thing I find the most frustrating is the lack of architecture standards.

 

Up until recently, it’s been a wild west as far as package management and project setup. Where do you put your code? How do you structure your folders? What web frameworks are actually worth investing into?

Basically same issues Node had early on. It’s getting MUCH better but I feel like it’s still a problem.

 

Ian Spence

 

Golangs lack of enum support is easily the most annoying thing about the language for me.

 

Currently I have a ruby script that has an enum schema and it prints out golang code for each enum it has all of the constants, an array of all the values, and a function to test if a given object is one of the enum values.

Massimo Artizzu

 

That’s easy: there are no types in JavaScript (and it will be like that for a long while).

 

Jason Steinhauser

 

F# is usually my go-to language, but I was once asked to write something in OCaml. F# is an OCaml derivative, so how hard could it be? It turns out several of the idiosyncrasies made it take longer for me to develop a simple tool. So basically, I dislike the small, yet significant, differences between F#, OCaml, and ReasonML.

 

Clay Stewart

 

It’s not really the language itself, but the JavaScript Front end framework ecosystem changed A LOT in the past decade, and it was jarring to switch frameworks every two years.

 

Justin Tervala

 

If Python is going to use whitespace as syntax (good idea) they should only allow either tabs or spaces. You can’t mix them, so you get invisible syntax errors.

 

Tomer Keren

 

Pythons import system. Once I have dirs I just can’t do it.

 

Alex Miasoiedev

 

Performance penalty of abstraction in Python/Ruby.

Orion Edwards

 

Ruby is my favourite language, here’s what I don’t like:

  • Green threads + blocking C libraries = giant fail
  • SO PAINFULLY SLOW
  • The standard library itself is inconsistent with its use of bang! methods
  • Module include + extend is messy.
  • “Open Classes” can’t be scoped – I want to add a String#dostuff, but I don’t want that to leak into all the third party libraries
  • No binary deployment packaging solution.

 

Don

Here are some things I dislike about Java (which is not my favorite language):

  • Generics type erasure (i.e. no reified generics)
  • Inability to catch multiple exceptions (of different types) in a single catch block
  • Lack of destructors (finalize() is a very poor substitute)
  • No support for closures or treating functions as data (anonymous inner classes are a very verbose substitute)
  • Checked exceptions in general, or more specifically, making unrecoverable exceptions checked (e.g. SQLException)
  • No language-level support for literal collections
  • No type-inference when constructors of generic classes are called, i.e. the type parameter(s) must be repeated on both sides of the ‘=’

 

 

Paul Meier

 

Erlang is absent from this list. Among my favorite languages, but a few flaws for sure:

  • Syntax. This includes the 3 terminating tokens (,;.) and aesthetics, but more generally on how the semantic meaning of the code is expressed in text. An example is on how all lowercase tokens are atoms, so to refer to a function you can’t just name it, you have to fun my_function/1, and ?PRECEDE_CONSTANTS_WITH_QUESTION_MARKS. Coming from Scheme, Haskell, etc. you just wish you could use a name.
  • Library support is lame. This is mostly external libraries, but even the old standard library. Newer versions of Erlang have sensible POSIX regexes, but the old one had a pretty horrible library for basic string manipulation. You also never know when you’re getting the value, or {ok, Value}.
  • Related: non-uniform tools for building and distribution. Ruby has gem and rake, RSpec. Perl has CPAN. I’m unaware of decent equivalents in Erlang.
  • The few Erlang specific tools are pretty strange. Mnesia is a great database, but coming from SQL you have lots of trivialities to learn. Same with the documentation @spec, which has a strange way of describing signatures.
  • Often the functional paradigm hurts when you just want that little bit of mutation. Supposing you want a Hash Table, you can’t just hack it as in Scheme, or SML. ets and dets alleviate some of the pain, but not much.

Sixth, bonus:

  • Import and export syntax for modules is a pile of fail, not unlike Java’s 80+ lines of importstatements.

All that being said, Erlang is a joy ^_^

 

Jay Bazuzi

[C#:]

  • I wish I could switch() on any type, and that case could be any expression.
  • Can’t use object initializer syntax with ‘readonly’ fields / private set autoprops. Generally, I want language help with making immutable types.
  • Use of {} for namespace and class and method and property/indexer blocks and multi-statement blocks and array initializers. Makes it hard to figure out where you are when they’re far apart or mismatched.
  • I hate writing (from x in y ... select).Z(). I don’t want to have to fall back to method call syntax because the query syntax is missing something.
  • I want a do clause on query syntax, which is like foreach. But it’s not really a query then.

I’m really reaching here. I think C# is fantastic, and it’s hard to find much that’s broken.

 

Resources

 

https://dev.to/nektro/what-do-you-dislike-about-your-favorite-language-kjc

https://stackoverflow.com/questions/282329/what-are-five-things-you-hate-about-your-favorite-language

 

Please follow and like us:
0

JavaScript v. Ruby v. Python – Which Programming Language Wins?

February 23, 2019 Posted by Programming 0 thoughts on “JavaScript v. Ruby v. Python – Which Programming Language Wins?”

 

When my friend pitched his startup idea to me, I had to come up with a language that could be used to write code for both a landing page and a mobile app. After some research, I came up with a list of pros and cons that you can also use to decide to which language you’d want to commit to.

Note that this list isn’t about which programming language is best to start learning how to program in. This is article’s focus is on anyone looking to build a flashy web app with the latest technologies.

 

JavaScript and the MEAN Green Stack

 

For years, JavaScript has been relegated to front end development, caged within your client browser. With the introduction of Node, JavaScript (in my books) reigns supreme in the world of back end web development. Here are some pros and cons of writing your back end in JavaScript.

Pros:

 

1) JavaScript is fast. Simple as that. Thanks to Google’s highly-optimized V8 engine and JavaScript’s inherently non-blocking asynchronous design, certain tasks handled by Node are, in certain cases,  20 times faster than tasks handled by Rails.

Just ask LinkedIn, who stripped out Rails and replaced it with Node for better performance, according to their case study. Then, you have Web Assembly to consider. This relatively new standard has allowed JavaScript developers to compile their code down to assembly language to further boost performance.

2) JavaScript devs are a one woman/man wrecking crew. Why cripple your burgeoning startup with overhead when you can hire a JavaScript developer who can write both your back end and front end web app in JavaScript?

Once you’re ready to build your mobile app, the JavaScript dev can then use React Native to build a fully functioning application. No Swift or Java required.

3) Node is the future. Just take a look at Google Trends. You want to be able to sell to VC’s the scalability of your company, and Node’s rising popularity provides a stable model of growth.

Cons:

 

1) JavaScript can become a spaghetti monster. Just Google ‘callback hell’ and you will see how illegible JavaScript can become when programmers don’t program functionally.

2) Node is fresh off the press. A lot of developers are still transitioning from the idea that JavaScript makes fun things happen on the web to the idea that JavaScript is robust enough to be implemented in the back end.

You also have to take into consideration that Node, unlike Rails and Django, is simply a platform that allows JavaScript to run outside of the client. Dependencies like Express, MongoDB, and Mongoose must be learned as well. This means a shortage of skilled Node-savvy developers.

 

Ruby on Steroids

 

With the rise of the Node/Express/React super team, Ruby on Rails seems to have diminished in the eyes of developers. It doesn’t help that Ruby has recently fallen to 8th on RedMonk’s language ranking, the lowest it’s ever been.

Then you have the rise of Machine Learning, Big Data, and A.I. – only some of the many futuristic keywords repeated ad nausea at Google’s keynote events. Python has monopolized this data-driven area of research, which in turn has dented Ruby’s popularity.

With that being said, here are some pros and cons of starting your startup with Ruby.

Pros:

 

1) Ruby has one of the most active dev communities out thereand that means great documentation  and amazing open-sourced dependencies, or “gems”. You want to use a React library within your Rails app? There’s a gem for that!

2) Ruby code is simple, yet expansive . The rubyist philosophy of “there’s more than one way of solving a problem” can be a bit overwhelming at first, but once you’ve mastered a few methods, you’ll be in awe of the seemingly countless tools at your disposal. Say goodbye to polyfills

3) I swear, Harry Potter invented Rails. Ruby’s framework is by far the most magical concoction.

With a single rails g scaffold command, you can create an entire blog. The routing system is excellent and once you learn all of Rail’s nuances, you will scale projects quickly .

Cons:

 

Ruby has a major kryptonite: Sloooow performance . Just look at the chart.

To quote Jules Winnfield, “That is one slow mother——”

Rails’ red screen of death may make you pull your hair out.  Oftentimes, debugging a Rails app can cause nightmares due to its abstract nature. Once the magic wears off, you’re left with long stack calls and nested folders to scavenge through.

 

Python’s Tango with Data

 

Jeff Knupp, a Python programmer, posted a great article that deftly explains why Python is rising in popularity. In short, the language is a tool for statisticians and has given rise to the job description of “data scientist.”

Recent developments in Deep learning, a technique that patterns machine learning off of the neural networks of the brain, has opened up the field of A.I. If your startup is going to exhibit any form of intelligence, having a Python code base may be the way to go. Here are some Python pros and cons:

Pros:

 

1) Like Ruby, Python is readable. It is also dynamically typed so that exceptions are raised, leading to more pain-free debugging processes.

2) Python is ideal for computational tasks because of its buffer protocol, which allows C extensions to be built out of Python, which can then be used to create powerful computational libraries.

3) The Django framework is similar to Rails in that a developer gets everything they need to scale a web app out of the box. The advantage, though, is that Python’s principle that “explicit is better than implicit” means that there are fewer abstractions.

Cons

 

1) Because of its focus on computation, Python is not a speed demon. In fact, it’s a fraction slower than Ruby…by 0.7% 

2) Python is restrictive. Dynamic typing is double-edged in this case in that it causes more errors, most of which show up only at runtime. This means a longer development process. The compiler also enforces its own style upon the programmer, forcing them to indent and space correctly lest they be hit with loud error messages.

Conclusion

 

 I believe JavaScript is the best language of the three, but it doesn’t mean that Python and Ruby don’t have their own uses. It depends on the situation of your startup. How much funding do you have?

Can you afford to pay talented Ruby and Python developers? What type of app are you building? If it’s a data driven app, perhaps Python is the way to go.

Ruby may be ideal if you have a tight-window until your app has to go to production or if your startup is based on contracting website construction. Rails will help your startup scale rapidly. But if you’re on a tight budget and you want high performance on your image sharing app, JavaScript has you covered.

References:

https://gearheart.io/blog/ruby-on-rails-vs-django-performance-comparison/

https://jeffknupp.com/blog/2017/09/15/python-is-the-fastest-growing-programming-language-due-to-a-feature-youve-never-heard-of/

https://www.infoworld.com/article/2887974/application-development/a-developer-s-guide-to-the-pro-s-and-con-s-of-python.html

https://blogs.nvidia.com/blog/2016/07/29/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/

https://blog.sessionstack.com/how-javascript-works-inside-the-v8-engine-5-tips-on-how-to-write-optimized-code-ac089e62b12e

https://medium.com/@TechMagic/nodejs-vs-ruby-on-rails-comparison-2017-which-is-the-best-for-web-development-9aae7a3f08bf

Please follow and like us:
0

6 Weirdest Programming Languages

February 22, 2019 Posted by Programming 0 thoughts on “6 Weirdest Programming Languages”

 

At a certain point, some of us like to veer towards the strange when normality becomes suffocating with its conventional rules and its ubiquitous similarity. Sometimes we need something that is a bit esoteric. That’s where the creators of esoteric programming languages or esolang have stepped in to fill the void. These programming languages that they’ve built are a bit too unconventional to be used practically. Yet, some of these languages are actually functional. When something is “functional” in the computing world, it’s Turing-complete. Let’s explore some of these esolangs together.

 

brainf***

 

brainf***, you can say, popularized esolangs. It embodies everything an esolang should be. The name itself suggests that the language was made for laughs, but at the same time it’s Turing-complete. It was invented by Urban Muller in 1993 when he wanted to write the smallest compiler possible for the Amiga OS.

 

Hello World:

>++++++++[<++++++++>-]<++++++++.>+++++[<+++++>-]<++++.+++++++..+++.>+++++++++[<———>-]<++.>+++++++[<+++++++>-]<++++++.>+++++[<+++++>-]<-.+++.——.——–.>++++++++[<——–>-]<—-.

 

False

 

False is known to have inspired brainf***. Taking inspiration from the Forth programming language, Wouter van Oortmerssen built a language with a compiler the size of 1024 bytes written in 68000 assembler.

Fibonacci sequence:

0i: 1a: 1b:
[i;16=~]
[a; $. ", " $ b; $ a: + b: i;1+i:]
#
"..."

[1=~]
[]
#
%

Ook!

 

This entire esolang,written by David Morgan-Mar, supposedly models the language of  an Orangutan. 

 

Hello World:

 

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.

COW

 

This is yet another joke language, which was inspired by Ook!, which was inspired by brainf***. These languages are considered to be within the family of brainf*** due to their similar set of commands.

 

Fibonacci sequence:

MoO moO MoO mOo MOO OOM MMM moO moO
MMM mOo mOo moO MMM mOo MMM moO moO
MOO MOo mOo MoO moO moo mOo mOo moo

 

The Square

 

The Square was invented by Ben Rusell in 2006. Like many other esoteric languages, The Square uses foreign syntax to execute instructions. Though this language adds a twist by allowing you to create a wall with #’s. This allows the user to delimit the program, hence creating a square.

Hello World:

v#############@
+:DDDDDDDDDDD:[
+#;;;;;;;;;;;#
+              
+ ;;
+  >v     ;
+ JJ+      >v
+>^-+      J-
+/–+      —
v{>[<;;    —
/- +  >v; —
+\ +;JJ+>v —
++ +>^++J- —
++ +J++++-;–
++ >^>^++->^-
++     ++-Jv<
>^     >^-+ ;
#      v-<+>[ ^
#      – ;+
#      >-[^

 

Joy

 

Despite its name, Joy is actually the one of the more serious esoteric languages. It earns it strangeness by excluding the lambda operator, which means there are no formal parameters in Joy. Joy is also unique in that everything in it is a function whose purpose is to accept a stack and return a stack. This allows for concise recursive algorithms.

 

Adding two numbers:

2  3 +  dup *

 

Please follow and like us:
0

The Easiest Programming Language To Learn Is…

February 20, 2019 Posted by Programming 0 thoughts on “The Easiest Programming Language To Learn Is…”

I want to start this article by saying that choosing to learn or not learn any language due to its difficulty level is a bad start towards a career as a programmer. You’re eventually going to have to learn another language that may be harder than the “easy” language. That said, there is a solid argument for choosing a language with the most shallow learning curve. That language may make it easier for you to grasp paradigms like Object Oriented Programming, which is the bedrock of modern programming.

So, let’s define what makes a programming language easy before picking one out of a hat. These are just some parameters I came up with because at one point I wanted to learn how to program. I found that these parameters contributed towards my comprehension of programming.

What Makes A Language Easy To Learn?

 

An easy to learn language has an excellent community. This community creates an ecosystem of detailed documentation that helps you solve problems. It also provides help through forums(though stack overflow has given almost every language this aspect of community). Thirdly, the community provides modules that make your life as a developer easier. Again, many languages have this feature, but a certain language is infamous for hamfisting this feature(I’m looking at you JavaScript).

 

An easy to learn language comes with many built-in methods. This is a bit like the batteries included deal you get with toys. As someone new to programming in general, you’d want  the language to have the function required to complete a certain task rather than having to install a package or come up with a function of your own.

An easy to learn  language isn’t mangled by rules and syntactic nuances. What scares many people off is seeing strings of curly braces and semicolons and thinking, well, how am I ever going to be able to read that, more or less write it?

An easy to learn language doesn’t have amorphous functions. At the end of the day, functions are the bread and butter of programming languages. The name says it all. Apps won’t function without them. So, being able to grasp functions early is crucial. Some languages make learning functions simple because the way in which you write these functions rarely changes. Other programming languages have circus functions that differ according to context.

 

An easy to learn language has a powerful framework. At some point during your learning process, you’re going to want to make either a web app to test your skills or some basic software. That language should have a framework with documentation that will allow you to transfer your fledgling skills to said framework. At the same time, you don’t want to be drowned by frameworks. You want to be able to choose one and go without a second thought. This process is supposed to be easy, right?

 

What Is The Easiest Language To Learn?

 

So now that we’ve laid down some highly subjective rules about what makes a programming language easy to learn. Let’s pick a language out of the hat(It’s safe to say JavaScript developers aren’t holding their breath on this one).

Ruby is arguably the easiest language to learn. If we combine all the factors that make a language easy to learn, you’ll realize that Ruby has one of the best communities out there. RubyGems is an excellent package manager. Unlike npm, it’s not bloated. You only have to specify the gems you want to use in a .Gemfile and install the corresponding “gems.”

The Ruby community is unique in that its origin was humble prior to the explosion of Ruby on Rails. David A. Black, the author of The Well Grounded Rubyists, said in regards to the early Ruby community, “The Pickaxe was the first English-language book on Ruby (there were already many books in Japanese), and the Ruby community outside of Japan was small enough that it was possible to get to know people easily through the English-language mailing lists and forums — on which, I should add, many Japanese Rubyists, including Matz, participated regularly.”

If you’re wondering who Matz(Yukihiro Matsumoto) is, he’s the chief designer of Ruby. Black went on to say in the interview when responding to what his favorite feature of Ruby was, “It sounds corny but my favorite “feature” is the community. I’m less entwined in it than I used to be, but over the years it has been a great source of support, friendship, and inspiration.”

That community extends to the extensive and well-organized Ruby docs. Anything you need to know about a particular method  or function is there in the docs. Because Ruby has so many built in methods, you don’t need to install too many gems to perform tasks. Solving a particular problem is simply easier in Ruby because you don’t need to search for a clever workaround.

Syntactically, Ruby is one of the easiest to read languages. Compare it to a language like C++ and Ruby looks like some type of pseudocode. Function are called methods in Ruby and simply need the def keyword prepended to the name you want to give to your method. No curly braces required.

Finally, Ruby on Rails is a renowned framework. Not many other languages got propelled to fame like Ruby did because of a framework. Actually, you can’t go very long talking about Ruby without having Rails mentioned. The reason for this is that Rails turns you into a wizard, figuratively speaking; you can set up a functioning blog site with a few commands.

This is made possible due to the fact that the Ruby language allows its more skilled developers to create domain specific languages(DSLs) using the Ruby programming language. What this does for beginners is that a language that was already easy to understand becomes even easier to use because you have new abstractions that don’t require you to dig deeper.

This isn’t necessarily a good thing, but you can see how it’s much easier to feel competent with Ruby. While others might have to learn a bit of SQL to query a database, you simply need to learn Ruby’s much easier plug-and-play version called Active Record.

 

In The End

Choose whatever language gets you to accomplish your goal. If you just want to learn a language to show off your skills to friends and family, then choosing the easiest language to learn may be the way to go. Like the “bad” programming language question, the easiest programming language to learn boils down to what you want to do with the language in the first place.

Do you want to be a systems programmer?

Then, perhaps, Go might be the easiest language to learn just because the pool for systems programming languages is vastly different. It will be interesting to hear what others think the easiest programming language to learn is since “programming language” means different things to different people. I asked this question in an open forum and got, Brainf***, Scratch, SQL, and Java(?).

Please follow and like us:
0

Can You Learn a Programming Language By Majoring in Computer Science?

February 13, 2019 Posted by Programming 0 thoughts on “Can You Learn a Programming Language By Majoring in Computer Science?”

 

I’m going to answer this question by showing you a general list of books you might have to read if you decide to take the CS route of learning a language. If reading these books and understanding them proves difficult, then perhaps learning a programming language can be done through other mediums, like online courses.

Of course, programming is much more than knowing rules and syntax. A Computer Science curriculum trains you to think analytically. For example, a Discrete Structures course allows you to communicate in terms of logarithmic time so that you can sound competent in front of your future colleagues.

For someone who wants to learn, let’s say, how to build an indie game she’s dreamed of building since she was a child, she has the option of getting a CS degree.

That will involve getting slightly familiar with some of the books below. Note that the books below aren’t a comprehensive list. The list caters to C++ and contains textbooks that cater to the scenario of aspiring game developers.

The last section can easily be removed or swapped by any aspiring software engineer. The first section can also be swapped with any programming language taught at universities.

I should also mention that books aren’t terrible. You can certainly learn something by reading a few textbooks.

What is bad is thinking you’re going to become a programmer simply by sitting through a few classes and highlighting key points from a textbook. The restaurant mentality doesn’t work in software engineering or life in general. Theory is great because it makes you sound like an intellectual and may come in handy in a few situations, but nothing beats practise.

Also note: these books were sourced from the Open Syllabus Project. The website stores a database of syllabi from  various universities across the U.S. 

 

The Programming Language (C++)

 

C++ Primer (This is actually a really good book. I was able to use it as a reference to build a simple text-based game years ago.)

C++ : The Complete Reference

Starting Out With C++ : From Control Structures Through Objects

C++ Programming : Program Design Including Data Structures

The C++ Programming Language (This book was written by MR. C++ AKA Bjarne Stroustroup, the developer of C++.)

Problem Solving With C++ : The Object of Programming

C++ Plus Data Structures

Data Abstraction and Problem Solving With C++ : Walls and Mirrors

Visual C++ 2008 : How to Program (I doubt many people read this book. I could be wrong.)

C++ FAQs

 

Algorithms

 

Discrete Mathematics and Its Applications

Randomized Algorithms

Algorithms

Algorithm Design

The Algorithm Design Manual

 

Architecture

 

Software Architecture in Practice

Object-Oriented & Classical Software

Structured Computer Organization

 

Systems

 

Fundamentals of Database Systems

Database Management Systems

Operating System Concepts

Modern Operating Systems

Computer Networks : A Systems Approach

Operating Systems : Internals and Design Principles

 

 

Gaming

 

Fundamentals of Computer Graphics

3D Game Programming All in One

OpenGL Distilled

A Theory of Fun for Game Design

 

 

Please follow and like us:
0