if you copy/paste something you should give a reference

> On 31 Mar 2017, at 16:40, Dimitris Chloupis <kilon.al...@gmail.com> wrote:
> 
> 
> 
> On Thu, Mar 30, 2017 at 5:04 PM Marc Hanisch via Pharo-users 
> <pharo-users@lists.pharo.org> wrote:
> Hello,
> 
> I have a question which is more related to software engineering than to 
> Pharo, but I hope that someone can give me an useful hint ;-)
> 
> 
> Thanks for any advice :-)
> Marc
> 
> There are three schools of thought 
> Static programming , Dynamic programming and Hybrid Programming
> 
> School of Static Programming 
> 
> The school of Static Programming which has been originating from compiled 
> languages (turn code from source code to machine code before execution) it 
> follows a static approach to the code. This means everything is clearly 
> predefined, planned ahead and follows strict rules. 
> 
> Pros: 
> 
> 1) because compilers have specific code that its intentions are clear its 
> much easier for them to optimize performance, hence code tends to run much 
> faster eg C code tends to be 100s to 1000s times faster than Python code 
> 
> 2) Certain bugs can be captured at compile time which makes code safer to 
> deploy to client. The compiler usually can capture such bugs and display 
> relevant warning and errors again because the compiler is more strict to what 
> goes in and what gets out.
> 
> Cons:
> 
> 1) Changing code on the fly, while the code runs can be notorious hard to do 
> because of these restrictions. This means it does not work well with coders 
> that love to experiment and try new ideas on the fly.
> 
> 2) Finding bugs also can be harder because of these restrictions, the coder 
> cannot easily change code on the fly on execution and generally the 
> programming language is much less forgiving not only when coding but also 
> when trying to inspect code and debug it.
> 
> 3) Overall design can be quite ugly in the shake of increased performance and 
> safety and that may affect the design of code as well
> 
> School of Dynamic Programming
> 
> The school of Dynamic Programming originates from interpreted languages , 
> though modern implementations have compilers that compile source code to byte 
> code and an interpreter that converts byte code to machine code on execution. 
> There is no need for planning ahead in dynamic coding, instead dynamic coding 
> works on the basis of abstractions and its proud to be the father and mother 
> of OOP. OOP is an abstraction based , dynamic coding workflow that dominates 
> dynamic language and even modern statically compiled languages.
> 
> Pros:
> 1) Code can change on the fly making coding much easier and beginner friendly
> 2) No need to plan ahead
> 3) more dynamic workflow also when debugging code that allows to interact and 
> communicate with code real time
> 
> Cons:
> 
> 1) Performance is sacrificed, thats not obvious for code that executes at 
> once but for code that repeats thousands to millions of times the slow downs 
> depending on the implementation of the language can be anywhere between 10s 
> of times to 1000s of times slower that a static language
> 
> 2) Using the wrong data / object will not be easily reported beforehand and 
> at times it can be hard to detect such problems. Other bugs can also be hard 
> to be detected even under the use of helping tools that examine and evaluate 
> code because of the generic nature of the code. 
> 
> Hybrid Programming
> 
> Even though static languages give us static programming outside the box and 
> dynamic languages  give us dynamic programming outside the box, modern 
> implementation allow for repetitively easily to mix these two workflows. Its 
> also possible for the coder to implement his/her own features with a language.
> 
> For example C language does not support OOP outside the box, but OOP 
> implementations for C do exist most popular being GObjects used by the GTK+ 
> library
> 
> C++ and Java although statically typed languages support also more dynamic 
> types through the use of templates and generics
> 
> Dynamic languages also can come with a variety of tools that perform checks 
> during runtime or even compile time. Also test driven development is very 
> popular for performing this task allowing the coder to create code , launch 
> with a single command thousands of tests and make sure his code passes even 
> more strict guidelines than an average compiler for a statically compiled 
> language. 
> 
> The catch however is that in both cases there are compromises, sub standard 
> implementations and plain weird behavior. 
> 
> Summary:
> 
> There is no right and wrong, whether we talk about types or other features 
> whether you will follow the dynamic school or the static school is up to you 
> and you preferences. Both approaches have pros and cons and both will make 
> you waste time while coding. 
> 
> The future however looks more bright and promising for the dynamic school 
> with the rise of AI. Compilers and developer tools in the future may be 
> smarter not only detecting errors and common bugs but actually analyzing 
> coder intentions and even coding philosophies. AI is already used for code 
> analysis but its still on early stage but is none the less our very close 
> future. 
> 
> Funny irony:
> 
> The most popular scenario for future technology is quantum computing. 
> Hardware by nature is "static" , you have to design it before hand and make 
> sure it works almost perfectly before selling it. This is reflected to the 
> basis of digital architecture where the smaller unit is bit which is always a 
> number and always either 1 or 0. But with quantum computing the bit can 
> inherit quantum properties and be both 1 and 0 at the same time. This will 
> allow in the future for more flexible design of "dynamic" hardware allowing 
> for hardware to also deal with abstractions directly. 
>   
>  
> 


Reply via email to