Certification

cancel
Showing results for 
Search instead for 
Did you mean: 

CLA Attempt - Elevator

Dear NI Community,

 

I attempted the Elevator CLA past paper today and was looking for some feedback and help with how to pass the exam.  Any help would be much appreciated.  I also thought the community might like to peruse over my attempt if there are any tips/tricks we can share.

 

It took me approximately 3hours 30 minutes so I would have put way more [Covers: XXX] tags in there with the extra half hour (get the excuses in early right)

 

Thanks in advance,

Dr. Robert M. Ward MSci PhD CPhys CLA CPI

Certified LabVIEW Architect M>easurement Badge Measurement Badge

0 Kudos
Message 1 of 7
(5,065 Views)

I'm not CLA level yet so I won't attempt to offer criticism. I'm curious about one thing: why are your FGV enums not typedefs?

0 Kudos
Message 2 of 7
(5,019 Views)

Robert,

 

You have a lot of good stuff in there!  I won't focus on what you did do rightSmiley Wink

 

Add the specifcation document to the project.  Trust me, your CLDs will thank you!

 

Some of those single frame sequence structures make very little sense.

 

Documentation at that level should include directions on how to implement the design (e.g. FGV for State of "XYZ" see REQ ABC_00xx Use FGV#00yy.vit)  I know! it is tough to draw the line between designing it and just doing it for a 4 hr project.

 

You need to get those wired terminals on the root BD! See here

 

Again, I focused on what could be potential improvements- there is some nice stuff in that! 


"Should be" isn't "Is" -Jay
0 Kudos
Message 3 of 7
(5,008 Views)

@JÞB wrote:

Interesting that somebody with just a CLD (and plenty of time on their hands right now) is giving advice for a CLA...

 

 

Yes, I am just ripping on Jeff right now.  If I can find the time, I might try to give the attempt a look.


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
0 Kudos
Message 4 of 7
(5,003 Views)

Ok, I skimmed through it in about 2 minutes.  But some quick comments.

 

General Exam points

1. You need A LOT more comments.  Explain to the CLDs (like Jeff Smiley Wink) what it is they need to do.  Make a document explaining your architecture and how it is supposed to work.  Keep it at a high level, but enough that the graders know what you were thinking.

2. You should make more cases in your Queued Message Handlers.  You should at least make a case for all of the obvious commands you will need for each module and just put a comment in there telling your underline what to do in that case.

3. Your "Covers" comments are a huge portion of your grade (30%).  Those points are all but free.  Make sure you have every requirement marked.  And mark them as you go along.  I also found it useful to check them off in the requirements paper as I did them.  When you are low on time, just make those "Covers" comments somewhere remotely close to where they belong.

 

Style Issues:

1. Your enums really need to be type defs.

2. Do not use non-default values for your cluster constants and then view as icon.  You are hiding important information there.  If you want to be a purist, you should not even use non-default values for your clusters at all.  You always bundle the values of your strings as well as your variant data.  (This purist stategy came out due to situations where when you updated the type def, all of the constants would revert to the default value).

 

Architecture Recommendations

1. I would just use 1 User Event to pass the data everywhere.  It is already a broadcast to everybody and it looks like you are putting the source in the string anyways, so keep it simple by just having one.

2. Do not use the Action Engine for your queues.  You are making it too easy for modules to accidentally interfer with each other (oops, I unbundled the wrong queue and made everything blow up!).  Instead, just create the queue on the module level and pass it to both of your loops.  Any communication between modules should use the User Event.

 

 

My honest opinion is that you would just barely fail.  Your general architecture is fine.  But you need to explain it.  You need more definition in your Queued Message Handlers and leave comments saying what needs done in those cases.  And I am assuming you get all of those "Covers" comments done in your final 30 minutes.  You really need to add those in as you go or you will forget about them.


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
Message 5 of 7
(5,001 Views)

Dear All,

 

First of all thank you so much for all your feedback.  It is really appreciated.  I have another practice attempt with the ATM example, which I plan on doing next week using all the feedback and suggestions (plus the good nugget(s) - more of those please!)

 

@Jeff_Bohrer - I have added the requirements document here for CLD's perusal but good idea on attaching it to the project 😉

 

Overall I would say that given infinite time I could do everything required, but really found the exam tough to time manage - that was probably the hardest thing about the CLA.  My tactic is to spend 30 minutes reading the requirements document, 30 minutes building a basic framework/template then 2hrs coding (incluing the front panel) and the remainder used for documentation.

 

Had a big discussion with a friend about the run arrow in the CLA - I made the point that getting a run arrow isn't difficult using an appropriate architecture but he said that for a CLA it may be perceived as a negative.  What are people's thoughts on this?  Personally I have been taught to never commit code to SVN unless it has a run arrow which is why that habit has stuck.

 

@Dave_st - I guess the enums on the FGV should indeed be type defined - that was laziness on my part.  Although I have been growing some affection to using strings instead, provided I can get my speeling wright (sic).

 

@crossrulz - thanks for the heads up on using non-default values for cluster constants.  Again that is probably laziness on my part but I hadn't really realised the implication that updating from the type-def might clear them when updated.   Also - having finished the exam I was like - why do I use so many user events unnecessarily, so that won't happen next time.  I did build an application once that has several MVCs loaded into sub-panels and found that being able to enqueue from other modules quite useful so would like to know if this is really not good practice and I should use the user event as you advise.

 

Anyways, many thanks again for all your advice and suggestions. Stay tuned next Friday when I hope to have the ATM example done as well.

 

Kind Regards,


Rob

Dr. Robert M. Ward MSci PhD CPhys CLA CPI

Certified LabVIEW Architect M>easurement Badge Measurement Badge

0 Kudos
Message 6 of 7
(4,968 Views)

@Robert-Michael-Ward wrote:
I did build an application once that has several MVCs loaded into sub-panels and found that being able to enqueue from other modules quite useful so would like to know if this is really not good practice and I should use the user event as you advise.

It really is not a good practice.  It is a concept called "coupling".  The idea is that none of your modules should know that the others exist, nor do they care.  Module A should just broadcast an update and possibly a command saying that XYZ should happen, but not care who actually does it.  And the other key is limiting the API to each module.  There should just be one location where Module B should be able to affect Module A (recieving of a command via the User Event).


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
Message 7 of 7
(4,960 Views)