The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming..
The value of learning/using patterns in programming.. The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
Go Back  Xtreme Visual Basic Talk > > > The value of learning/using patterns in programming..


Reply
 
Thread Tools Display Modes
  #1  
Old 12-15-2013, 09:41 PM
hDC_0The value of learning/using patterns in programming.. hDC_0 is offline
Contributor

* Expert *
 
Join Date: Feb 2004
Posts: 559
Default The value of learning/using patterns in programming..


I decided to put his here instead of the Technical Discussions part of the F & D sub-forum because it's really arising out of some griping/whining about how my non-VB related coding is going,
but it's still something that VB6/VB.Net-ers might find relevant.

I can't really go too deep into the details of the project (NDA-bound), but essentially it's dealing with some cloud based rendering farm software that has an Android-based front end (and outputs video as the final "product" to a content delivery network).
It's a 'big data" project that at one point had a whole bunch of programmers working on it, but at this point it's down to the "maintenance crew' which basically consists of me and another guy.

The term "maintenance" meaning (in this context) coming into a situation where the the whole thing is a complete mess (almost from beginning to end) and basically could benefit from
not just some minor re-factoring but a total ground up rewrite.

However that is not what the client wants to hear (or is willing to wait for..or pay for).

Anyway the other guy on the "maintenance" programming team is coming from a place where he has vast knowledge of low level video processing using C/C++,
so I'm not really the main/only the "graphics guy" on this particular project,
I'm the "everything-else-but-video-processing" guy.
Lucky me?

In case you think I'm the world's foremost expert on cloud programming, I'm definitely not.

However I was in a meeting the other day with the video processing programmer (let's call him "Stan" for the purposes of this post --not his real name) and the project manager (let's call him "Bill" for the purposes of this post --also not his real name).

I tried to bring up a discussion about the use of REST-ful APIs.
I'm looking at both Bill and Stan and I'm getting totally blank looks.

So I decided to throw something out there in a general way (being diplomatic):
"..and how do you both think about how the use of REST-ful APIs might best benefit the project..."

"Well..uhm..". Bill starts out and looks to Stan who starts squirming a bit in the chair
and looks back to Bill saying:
"'Well, uh, it's really the project manager's opinion that.." (and just sort of trails off..looking at Bill).

Bill sorts of considers this for a moment.

He sort of had this "let's not panic" look that managers get (when they are in over there head,
trying to manage technical people doing a technical task they don't really understand).

"Well to be honest, I hadn't actually consider the use of..whatever you said.. up to this point...so maybe you could give use some background that might help us understand where you are coming from in bringing this up.."

[Manager-speak translation]:
Quote:
I don't have a clue what you are talking about and you've definitely got some explaining to do if I've got to deal with this.
So I take a deep breath.

..and in that fraction of a second:
1.) I'm thinking "how can anyone who deals with programming in the year 2013 not know anything about representational state transfer?"
(Not even heard some passing mention of the use of the acronym --even if they didn't fully understand what it means or is about).
Quickly this is followed on by:
"A huge web-based coding project has been left in the hands of guys who don't even know about (or are aware of the use of) REST-ful APIs .."
--then I purposely stopped myself from going "there" (getting into an unproductive frustration-blaming "knot").
Break (escape from iterating at that place).

Because in that tiniest fraction of a second
another secondary thread of thought popped into my head:
2.)"You are going to have to explain come up with a whole big explanation ad-hoc (in a few hundred milliseconds) and you have no idea that this was coming or have nothing prepared to say..yikes!"

Needless to say I somehow got through the moment.

I don't even remember what I said.

I guess it wasn't really important because Stan was already "tuned out" (checking out his messages on his phone) and anything I said to Bill was going to be mentally dismissed with "it's a technical thing --just sort it out and let me know when you've figure out the solution.."

The only thing of what I said that "resonated" at all with Bill/Stan,
(and that I got feedback on later when the topic came up in other meetings when suddenly the REST-ful PHP code I had written
became the focal/fulcrum point for a major re-write of large sections of the project data transfer into a client UI),
was that they remembered some analogy I had made about the patterns of trade amongst medieval villages.

Yep..there it is..using a pattern analogy had not only saved/salvaged a whole long technical explanation,
but basically saved an even longer series of discussions about what might efforts doing to move the project forward,
despite the fact that neither of them understood what my coding efforts where doing from a technical standpoint.

To break this out into a large discussion though..

One of the things programmers frequently are called upon to do is open a new empty programming project window and stare at the entirely blank editor window/tab of their favorite IDE, saying/thinking to themselves:
"What code do I need to come up with?"

Of course they already know (from a design standpoint) what their future, yet unwritten code, needs to do.

However going through the programmers mind (deciding what code they need to write..what coding approach they need to take)..is:
"What pattern exactly am I dealing with here?"
or
"I've written code like this before..so what was the code pattern I used before that proved most effective/efficient?"

My purpose in bring this up is not to talk about Design Patterns in the sense mentioned in this old BillSoo post,
but in the sense that beginning programmers need to develop a kind of "spidey sense" of heightened awareness to coming upon patterns.

These could be patterns in others people's code.
Where you look at some other person's coding solution and think:
"That was a really great approach to use of recursion to solve that type of problem. I should remember that 'pattern' of doing that task."

Or it could even be the ability to "extract" a pattern by looking at whole bunch of code samples and seeing the underlying way of doing things that a particular coding language seems the optimal way of approaching the task involved.

Or, another way of phrasing/approaching it,
a certain forum member once said in this post:
Quote:
Originally Posted by bokeh
The way I learn is not only reading about theory but looking at code to look for patterns.
If I can't see a pattern to what's going on it IS all just arcane gobbledygook.
The chance of seeing a pattern increases (at least for me) with the more code samples that I have to compare.
That's why when I see newbies saying:
"I can't find this specific piece of code that does this specific thing",
I'm both disappointed and dismayed that they haven't quite figured out how to extract patterns from seeing the different ways other (better or more experienced) programmers code things.

Seeing/understanding patterns helps a beginner/intermediate programmer transition to an intermediate/advanced programmer, who is confident writing their own code from scratch,
instead of just doing the equivalent of "code mash ups" of other peoples code (with maybe some bit of "glue" coding to assisting the clumped together code to work).

It also helps to being/becoming "code language agnostic".

Seeing/recognizing/understanding the patterns in VB6/VB.Net code,
and you start to recognize those same code patterns, and other similar patterns, in other (often quite different) languages.

How can I convey this (really get this across) to new forum members who have just decided to write their first VB.Net code and need "a place to start"?

If I say "patterns - they're important" I just come off as smug.

Then I have to come up with a follow-on post where I try to explain as best I can.
Maybe this post can be the starting point of that follow-on discussion.


Anyway, for what it's worth... <*shrug*>
That's my "random thought" post for the day.

Last edited by hDC_0; 12-15-2013 at 10:04 PM.
Reply With Quote
  #2  
Old 12-16-2013, 10:31 AM
dilettante's Avatar
dilettanteThe value of learning/using patterns in programming.. dilettante is offline
Underclocked lifestyle

Forum Leader
* Guru *
 
Join Date: Feb 2005
Location: Michigan, USA
Posts: 4,524
Default

You actually have a couple of things in there, but in your mind they may be related... as examples of your source of frustration.

Whether you use a term like "patterns" or "paradigms" or whatever, these are real enough. You can even deal with them at different levels of granularity (high level perhaps being the difference between a batch or command-line program, a Windows service, a GUI desktop program, and a Metro/Modern application). Even that level has such differences on other platforms. Then you start looking at the applications themselves and lower level "patterns" emerge. And peering inside applications you see even lower level patterns emerge.

Those low-level patterns are probably the most common stumbling point in forum posts, which deal with very granular problems. These are down in the dirt and may perhaps consist of things like how to do a certain kind of database update handling concurrency properly, using a GUI application tray icon, handling TCP stream fragmentation, etc.

If we wander off into the REST topic, be careful what you wish for. There are REST purists who who argue all day and try to hack up some nasty "solutions" just to maintain that purity, then others who will call nearly anything sent via HTTP a "REST API." Don't leave these two camps alone in the same room together.


There are few people programming today with any significant formal education, and often even those with significant experience have learned by a combination of rote and cut-and-try. The result can be quite narrow specialization.

As you may have noticed in branching out to cloud computing and new platforms, there is really a heck of a lot to learn if one is going to have a broad background today. Even that's not entirely new though.

For many years I worked on mainframes made by vendor A running operating system B. When the hiring process allowed somebody in with only experience with vendor X's Y oeprating system such people often took as long as two years to get up to speed even though they had many years of vendor X experience. That meant two years during which they could only be given the lowest level tasks because they had no idea how everything fit together, let alone enough vendor A terminology to make good use of reference materials.


But I've already rambled on too long without even knowing whether I am anywhere close to where your pain is coming from.
Reply With Quote
  #3  
Old 12-23-2013, 04:42 PM
hDC_0The value of learning/using patterns in programming.. hDC_0 is offline
Contributor

* Expert *
 
Join Date: Feb 2004
Posts: 559
Default Dealing with granularity and moving beyond specialization..

Thanks for the unexpected reply.

Quote:
Originally Posted by dilettante
Those low-level patterns are probably the most common stumbling point in forum posts, which deal with very granular problems.
I guess this was the main point I was trying to make toward the end of my original post.
Quote:
Originally Posted by dilettante
As you may have noticed in branching out to cloud computing and new platforms, there is really a heck of a lot to learn if one is going to have a broad background today.
Yes this targets the main source of my frustration.

I spend many many hours outside of work situations constantly trying to keep up with new technologies in as broad a way as possible and then be so constrained when I go into a contract situation where everything is "narrowcasted" (which includes the lack of familiarity on the part of project managers with all the different technological methodologies available to provide solutions today).

Just to show, though, that I haven't left VB.Net behind entirely as the year draws to a close,
I'll add on a few lines of quick and dirty holiday-themed "coder graphics":

Code:
Public Class Form1
  Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
    Console.WriteLine("     Merry Xmas" + vbCrLf)
    DrawDebugTree(10)
    DrawDebugTreeTrunk(3, 3, 8)
  End Sub

  Private Shared Sub DrawDebugTree(x As Integer)
    For v As Integer = 0 To x - 1
      For s As Integer = v + 1 To x - 1
        Console.Write(" ")
      Next
      For star As Integer = 2 * v To 0 Step -1
        Console.Write("*")
      Next
      Console.WriteLine()
    Next
  End Sub

  Private Shared Sub DrawDebugTreeTrunk(x As Integer, y As Integer, offset As Integer)
    For v As Integer = 0 To x - 1
      For h As Integer = 1 To (y + offset)
        If h <= offset Then
          Console.Write(" ")
        Else
          Console.Write("*")
        End If
      Next
      Console.WriteLine()
    Next
  End Sub
End Class

Last edited by hDC_0; 12-23-2013 at 04:51 PM.
Reply With Quote
  #4  
Old 01-27-2014, 06:10 PM
EpcH's Avatar
EpcH EpcH is offline
Contributor
 
Join Date: Jan 2003
Location: USA, CT
Posts: 460
Default

Do not expect any team member and/or a project manager to be in the same page with you when it comes to technical knowledge. Instead of throwing them buzz words ( yes a REST API can be a buzz word for some), throw them numbers which they can understand. For example, if we switch from technology A to technology B, according to our test results, we can increase .... by %x factor.. which addressees the requirement # bla bla..

And back to the topic, software design patterns is a subject that needs to be a must course in every single computer science program in every freaking university. It is that important but yet it is being neglected by most undergraduate or even master programs.
__________________
Human. It's kinda like Sebacean, but we haven't conquered other worlds yet, so we just kick the crap out of each other.
Crichton
PK Tech Girl
Reply With Quote
  #5  
Old 01-28-2014, 08:41 AM
Cerian Knight's Avatar
Cerian KnightThe value of learning/using patterns in programming.. Cerian Knight is offline
Polymath (in disciplina)

Super Moderator
* Expert *
 
Join Date: May 2004
Location: Michigan
Posts: 4,194
Default

REST is newer than SOAP, so I guess you need to be knee-deep in this to know which is appropriate, or perhaps, just strikes your fancy. Not relevant to what I do, however, so not on my radar.

I'm more concerned with the foundational aspects of computer science that help build true problem-solvers. The atomic level thinking evolved through forced study of microprocessor design and assembly language programming are high on my list. I see that recent quantum programming projects (now we even have qCraft for Minecraft) have jumped the gun a bit by promoting a new way of thinking about programming that cannot be fully utilized or realized without an intuitive understanding of the atomic fundamentals. I use these foundations to resolve situations in everyday life, not just programming.

There is hope. With the push for heterogeneous computing, at least programmers (new and old alike) will be more likely enthused to leverage different architectures at-will within the same construct. Further expansion of this concept will eventually allow the programmer to treat local and remote computational and storage elements as resources to bring in and out of context on a whim. The limiting factor will be consensus of how quotas, slicing and security should be implemented to prevent resource abuse.

All that being said, more and more I yearn to just switch it all off... but, alas, I can't. I'm hooked on the tech (and drooling over the idea of getting an Oculus Rift).
__________________
I got all the answers wrong on the GLAT, apparently even #9 (where I put a period in the middle of the box and labeled it 'singularity ripe for rapid inflation').

Last edited by Cerian Knight; 01-28-2014 at 11:41 AM.
Reply With Quote
  #6  
Old 01-31-2014, 04:12 PM
hDC_0The value of learning/using patterns in programming.. hDC_0 is offline
Contributor

* Expert *
 
Join Date: Feb 2004
Posts: 559
Default

Wow..this thread is still going
Thanks to EpcH and Cerian Knight for their contributions.

With regard to what EpcH said:
Quote:
Instead of throwing them buzz words throw them numbers which they can understand. For example, if we switch from technology A to technology B, according to our test results, we can increase .... by %x factor.. which addressees the requirement # bla bla..
I have tried this approach also (which I call the "solutions-friendly" approach) and have encounter some blank stares as response for this as well..

I totally (100%) agree with your statement:
Quote:
And back to the topic, software design patterns is a subject that needs to be a must course in every single computer science program in every freaking university. It is that important but yet it is being neglected by most undergraduate or even master programs.

With regard to what Cerian Knight said:
Quote:
REST is newer than SOAP..or perhaps, just strikes your fancy
I worked with SOAP for several years and always found it "rigid" (with working with static and strongly defined data exchange formats), where as the REST-ful "philosophy" is adaptable to a wide variety of technologies and techniques.
Personally [IMHO], I just find it "fits" better with "technologies" like AJAX and JSON (but to each his own when it comes to designing/using web services).

Cerian also said something interesting:
Quote:
I see that recent quantum programming projects [are] promoting a new way of thinking about programming that cannot be fully utilized or realized without an intuitive understanding of the atomic fundamentals.
There is hope. With the push for heterogeneous computing, at least programmers (new and old alike) will be more likely enthused to leverage different architectures at-will within the same construct. Further expansion of this concept will eventually allow the programmer to treat local and remote computational and storage elements as resources to bring in and out of context on a whim. The limiting factor will be consensus of how quotas, slicing and security should be implemented to prevent resource abuse.
(emphasis mine)
I too have been following the evolving concepts behind quantum computing.
I also see this trend in treating remote computation resources..and see the danger for resource "abuse".

Right now things are still evolving so it's hard to see what eventual standards and best practices will emerge, but there will probably eventually be millions and millions of cores available via the Internet to be utilized as massive parallel distributed computing "resources" (think "botnets-carried-to-the nth-degree"), however there aren't even algorithms and software code/techniques to "tease out" the necessary "atomization" of functionality to make things operate as efficiently as possible to tackle really difficult problems.

Who knows, though, someone could come up with a solution tomorrow to the P versus NP problem, win a Millennium Prize, and a whole bunch of problems which where thought too be hard to do computationally, could have real time solutions.
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Forum Jump

Advertisement:





Free Publications
The ASP.NET 2.0 Anthology
101 Essential Tips, Tricks & Hacks - Free 156 Page Preview. Learn the most practical features and best approaches for ASP.NET.
subscribe
Programmers Heaven C# School Book -Free 338 Page eBook
The Programmers Heaven C# School book covers the .NET framework and the C# language.
subscribe
Build Your Own ASP.NET 3.5 Web Site Using C# & VB, 3rd Edition - Free 219 Page Preview!
This comprehensive step-by-step guide will help get your database-driven ASP.NET web site up and running in no time..
subscribe
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming.. The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming.. The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
 
The value of learning/using patterns in programming..
The value of learning/using patterns in programming..
 
-->